#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
unordered_map<int, unordered_map<int, int>> mp;
unordered_map<ll, ll> bsf(int s)
{
unordered_map<ll, ll> m;
priority_queue<vector<ll>, vector<vector<ll>>, greater<vector<ll>>> q;
q.push({0, s});
while (q.size() > 0)
{
auto p = q.top();
q.pop();
// cout << s << " " << p[1] << " " << p[0] << endl;
m[p[1]] = p[0];
for (auto nx : mp[p[1]])
{
if (m.count(nx.first))
{
continue;
}
else
{
q.push({(ll)p[0] + nx.second, nx.first});
}
}
}
// cout << s << endl;
// for (auto a : m)
// {
// cout << "(" << a.first << " " << a.second << ")" << endl;
// }
return m;
}
int main()
{
int n;
cin >> n;
vector<int> line(n - 1);
vector<int> dist(n - 1);
for (int i = 0; i < n - 1; ++i)
{
cin >> line[i];
}
for (int i = 0; i < n - 1; ++i)
{
cin >> dist[i];
}
int A, B, C;
cin >> A >> B >> C;
for (int i = 0; i < n - 1; ++i)
{
int a = i + 1, b = line[i] + 1;
// cout << a << " - " << b << " " << dist[i] << endl;
mp[a][b] = dist[i];
mp[b][a] = dist[i];
}
unordered_map<ll, ll> mA = bsf(A);
unordered_map<ll, ll> mB = bsf(B);
unordered_map<ll, ll> mC = bsf(C);
ll ans = LONG_LONG_MAX;
for (int i = 1; i <= n; ++i)
{
// cout << mat[A][i] << " " << mat[B][i] << " " << mat[C][i] << endl;
ans = min(mA[i] + mB[i] + mC[i], ans);
}
cout << ans << endl;
return 0;
}
有没有人帮我指出错误呀。 我这个只过了18,没有超时,没有超内存