1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #include <iostream> #include <cstring> #define N 110
using namespace std;
int cnt[N]; int h[N], e[N * 2], ne[N * 2], idx; int n;
void add(int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx ++; }
int dfs(int u, int f, int d) { int sum = cnt[u] * d;
for (int i = h[u]; ~i; i = ne[i]) { int j = e[i]; if (j == f) continue; sum += dfs(j, u, d + 1); }
return sum; }
int main() { memset(h, -1, sizeof h);
cin >> n; for (int i = 1; i <= n; ++ i) { int l, r; cin >> cnt[i] >> l >> r; if (l) add(i, l), add(l, i); if (r) add(i, r), add(r, i); }
int res = 1e9;
for (int i = 1; i <= n; ++ i) res = min(res, dfs(i, -1, 0));
cout << res << endl;
return 0; }
|