Cod sursa(job #508152)

Utilizator ChallengeMurtaza Alexandru Challenge Data 7 decembrie 2010 17:41:06
Problema Cerere Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <vector>

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],K[MaxN],N,x,y,depth,S[MaxN],T[MaxN];
vector<int> a[MaxN];

void dfs(int x)
{
	S[++depth]=x;
	if(K[x]!=0)
	{
		viz[x]=viz[S[depth-K[x]]]+1;
	}
	for(vector<int>::iterator it=a[x].begin();it!=a[x].end();++it)
	{
		dfs(*it);
	}
	S[--depth]=0;
}

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;
		a[x].push_back(y);
		T[y]=x;
	}
	fin.close();

	for(register int i=1;i<=N;++i)
	{
		if(T[i]==0)
		{
			dfs(i);
			break;
		}
	}

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