Cod sursa(job #773452)

Utilizator danalex97Dan H Alexandru danalex97 Data 1 august 2012 18:35:26
Problema Cerere Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <fstream>
#include <vector>

#define Nmax 100011

using namespace std;

int K[Nmax],N,Solve[Nmax],Dad[Nmax];
vector<int> Leg[Nmax];

int St[Nmax],Size,Nod;

void Get( int Nod )
{
	St[++Size]=Nod;
	Solve[Nod]=Solve[ St[ Size - K[Nod] ] ]+1;
	
	for (int i=0;i< int( Leg[Nod].size() ) ;++i)
		Get( Leg[Nod][i] );
	
	St[Size--]=0;
}

ifstream F("cerere.in");
ofstream G("cerere.out");

int main()
{
	F>>N;
	for (int i=1;i<=N;++i)
	{
		F>>K[i];
		if ( !K[i] )
			Solve[ i ]=-1;
	}
	
	for (int i=1;i<=N;++i)
	{
		int x,y;
		F>>x>>y;
		
		Dad[y]=x;
		Leg[x].push_back(y);
	}
	
	for (int i=1;i<=N;++i)
		if ( !Dad[i] )
		{
			Nod=i;
			break;
		}
	
	Get( Nod );
	
	for (int i=1;i<=N;++i)
		G<<Solve[i]<<' ';
	G<<'\n';
}