Cod sursa(job #342550)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 22 august 2009 12:40:30
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include<stdio.h>
#include<vector>
#define nmax 100005
using namespace std;
int rad,niv,n;
int p[nmax];
int st[nmax];
int v[nmax];
int t[nmax];
vector<int> f[nmax];

void df(int x)
{
	int i,lim=f[x].size();
	st[niv]=x;
	if(!v[x])
		p[x]=0;
	else
		p[x]=p[st[niv-v[x]]]+1;
	for(i=0;i<lim;i++)
	{
		niv++;
		df(f[x][i]);
		niv--;
	}
}

int main()
{
	freopen("cerere.in","r",stdin);
	freopen("cerere.out","w",stdout);
	scanf("%d",&n);
	int i,l1,l2,x;
	for(i=1;i<=n;i++)
		scanf("%d",&v[i]);
	for(i=0;i<n-1;i++)
	{
		scanf("%d%d",&l1,&l2);
		f[l1].push_back(l2);
		t[l2]=l1;
	}
	for(i=1;i<=n;i++)
		if(!t[i])
		{
			x=i;
			break;
		}
	niv=1;
	df(x);
	for(i=1;i<=n;i++)
		printf("%d ",p[i]);
	return 0;
}