Cod sursa(job #508133)

Utilizator ChallengeMurtaza Alexandru Challenge Data 7 decembrie 2010 16:53:58
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>

using namespace std;

const char InFile[]="cerere.in";
const char OutFile[]="cerere.out";
const int MaxN=100111;

ifstream fin(InFile);
ofstream fout(OutFile);

int viz[MaxN],T[MaxN],K[MaxN],N,x,y;

int dfs(int x)
{
	if(viz[x]==0)
	{
		if(K[x]==0)
		{
			viz[x]=1;	
		}
		else
		{
			int t=x;
			for(register int i=0;i<K[x];++i)
			{
				t=T[t];
			}
			viz[x]=1+dfs(t);
		}
	}
	return viz[x];
}

int main()
{
	fin>>N;
	for(register int i=1;i<=N;++i)
	{
		fin>>K[i];
	}
	for(register int i=1;i<N;++i)
	{
		fin>>x>>y;
		T[y]=x;
	}
	fin.close();

	for(register int i=1;i<=N;++i)
	{
		dfs(i);
	}

	for(register int i=1;i<=N;++i)
	{
		fout<<viz[i]-1<<" ";
	}
	fout.close();
	return 0;
}