Cod sursa(job #391869)

Utilizator bog29Antohi Bogdan bog29 Data 6 februarie 2010 13:45:10
Problema Cerere Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include<fstream>
#define dmax 100003
#define mult 1000000000
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
int n,c[dmax],t[dmax],dm[dmax];

void mergi(int i)
{	int k,j;
	k=i;
	for(j=1;j<=c[i];j++)
		k=t[k];
	if(dm[k]<mult)
		dm[i]=1+dm[k];
	else mergi(k);	
}

int main()
{	int i,a,b;
	in>>n;
	for(i=1;i<=n;i++)
		in>>c[i];
	for(i=1;i<n;i++)
	{	in>>a>>b;	
		t[b]=a;
	}
	in.close();
	for(i=1;i<=n;i++)
	{	if(c[i]==0)
			dm[i]=0;
		else dm[i]=mult;	
	}	
	for(i=1;i<=n;i++)
		if(dm[i]==mult)
		{	mergi(i);
		}
	for(i=1;i<=n;i++)
		out<<dm[i]<<" ";
	out.close();	
	return 0;
}