Cod sursa(job #93635)

Utilizator tvladTataranu Vlad tvlad Data 19 octombrie 2007 17:59:39
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
#include <vector>
using namespace std;

const int N = 10000;

int n, root;
int a[N], up[N];
vector<int> down[N];

int df ( int nod ) {
	a[up[i]] += a[i];
	int move = a[i];
	a[i] = 0;
	for (int i  = 0; i < down[nod].size(); ++i) move += df(down[nod][i]);
	return move;
}

int main() {
#ifndef ONLINE_JUDGE
	freopen("1443.in","rt",stdin);
	freopen("1443.out","wt",stdout);
#endif
	for (scanf("%d",&n); n > 0; scanf("%d",&n)) {
		memset(up,0,sizeof(int)*N);
		move = 0;
		for (int i = 0; i < n; ++i) {
			int na, v;
			scanf("%d",&v); scanf("%d %d",&a[v],&na); --a[v];
			for (int j = 0; j < na; ++j) {
				int nod;
				scanf("%d",&nod);
				up[nod] = v;
				down[v].push_back(nod);
			}
		}
		for (int i = 0; i<n; ++i) {
			if (up[i] == 0) {
				root = i;
				break;
			}
		}
		printf("%d\n",df(root));
	}
	return 0;
}