Cod sursa(job #774028)

Utilizator lily3Moldovan Liliana lily3 Data 3 august 2012 11:12:09
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<fstream>
#include<vector>
using namespace std;

int i,j,n,m,x,y,g[100001],s[100001],t[100001],nr;
vector<int> a[100001];
int viz[100001];
void dfs(int x,int xx,int crt)
{
	int i;
	viz[x]=1;
	++nr;
	if(nr==crt)
	{
		t[xx]=x;
		return ;
	}
	for(i=0;i<a[x].size();++i)
		if(!viz[a[x][i]])
			dfs(a[x][i],xx,crt);
}
int det(int x)
{
	
	if(t[x])
		++nr,det(t[x]);
	return nr;
}
int main()
{
	freopen("cerere.in","r",stdin);
	freopen("cerere.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;++i)
		scanf("%d",&s[i]);
	for(i=1;i<n;++i)
	{
		scanf("%d%d",&x,&y);
		a[y].push_back(x);
	}
	for(i=1;i<=n;++i)
		if(s[i])
	{
		memset(viz,0,sizeof(viz));
		nr=-1,dfs(i,i,s[i]);
	}
	for(i=1;i<=n;++i)
	    nr=0,printf("%d ",det(i));
	return 0;
}