Cod sursa(job #353444)

Utilizator andreii_93andrei ion andreii_93 Data 5 octombrie 2009 10:41:39
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include<cstdio>
#include<vector>
using namespace std;

const int N=1<<17;

int n,k,q[N],v[N],t[N];
bool tata[N];
vector<int> a[N];
void dfs(int x)
{
	v[++k]=x;
	if(q[x])
		t[x]=t[v[k-q[x]]]+1;
	else
		t[x]=0;
	for(int i=0;i<a[x].size();++i)
		dfs(a[x][i]);
	--k;
}

int rad()
{
	for(int i=1 ; i<=n ; ++i)
		if(!tata[i])
			return i;
	return 0;
}

int main()
{
	int x,y,i;
	freopen("cerere.in","r",stdin);
	freopen("cerere.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;++i)
		scanf("%d",&q[i]);
	for(i=1;i<n;++i)
	{
		scanf("%d%d",&x,&y);
		tata[y]=true;
		a[x].push_back(y);
	}
	dfs(rad());
	for(i=1;i<=n;i++)
		printf("%d ",t[i]);
	return 0;
}