範例程式碼 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;
}