提供深搜方法
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int N = 1010;
int n;
bool st[N],g[N][N];
int ans = 0x7f7f7f7f;
int num[N];
struct node {
int p, step;
};
int bfs(int u) {
int sum = 0;
memset(st, false, sizeof st);
queue<node>q;
st[u] = true;
q.push({ u,0 });
while (!q.empty()) {
node s = q.front();
q.pop();
for (int i = 1; i <= n; i++) {
if (g[i][s.p] && !st[i]) {
node next = { i,s.step + 1 };
sum += next.step * num[i];
st[i] = true;
q.push(next);
}
}
}
return sum;
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
int w, l, r;
cin >> w >> l >> r;
num[i] = w;
if (l) g[i][l] = g[l][i] = true;
if (r) g[i][r] = g[r][i] = true;
}
for (int i = 1; i <= n; i++) {
ans = min(ans, bfs(i));
}
cout << ans;
return 0;
}