範例程式碼 uva10672
//uva10672
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
long long total;
vector<int> update(vector< vector<int> > &tree, int root) {
int n = tree[root].size();
int subtree = 1, marble = tree[root][0];
vector<int> temp;
for (int i = 1; i < n; ++i) {
temp = update(tree, tree[root][i]);
subtree += temp[0];
marble += temp[1];
}
total += abs(subtree - marble);
return vector<int>{ subtree, marble };
}
int main() {
int n, m, v, d, temp, root;
while (cin >> n && n != 0) {
total = 0;
vector< vector<int> > tree(n + 1);
vector<bool> is_root(n + 1, true);
for (int i = 0; i < n; ++i) {
cin >> v >> m >> d;
tree[v].push_back(m);
for (int j = 0; j < d; ++j) {
cin >> temp;
tree[v].push_back(temp);
is_root[temp] = false;
}
}
for (int i = 1; i <= n; ++i) {
if (is_root[i]) {
root = i;
break;
}
}
update(tree, root);
cout << total << endl;
vector<bool>().swap(is_root);
vector< vector<int> >().swap(tree);
}
return 0;
}