Cod sursa(job #1268668)

Utilizator Mr.DoomRaul Ignatus Mr.Doom Data 21 noiembrie 2014 11:43:58
Problema Cerere Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <fstream>
using namespace std;

ifstream is("cerere.in");
ofstream os("cerere.out");

int k[100001];
int kn[100001];
int n;
int t[100001];
int cnt;
int ta;
void Find(int x);
int main()
{
	is >> n;
	for ( int i = 1; i <= n; ++i )
		is >> k[i];
	int x, y;
	for ( int i = 1; i < n; ++i )
	{
		is >> x >> y;
		t[y] = x;
	}
	for ( int i = 2; i <= n; ++i )
	{
		cnt = 0;
		if ( k[i] )
		{
			ta = i;
			Find(i);
			kn[i] = cnt;
		}
	}
	for ( int i = 1; i <= n; ++i )
		os << kn[i] << ' ';
		
	is.close();
	os.close();
	return 0;
}

void Find(int x)
{
	if ( k[x] == 0 )
		return;
	for ( int i = 1; i <= k[x]; ++i )
		ta = t[ta];
	++cnt;
	Find(ta);
}