Cod sursa(job #651401)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 20 decembrie 2011 11:32:31
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include<cstdio>
#include<vector>
#define NMAX 100002
using namespace std;
int n,m,x,y,K[NMAX],i,j,VIZ[NMAX],future[NMAX],S[NMAX];
vector<int>G[NMAX];
void cerere (int n ,int niv){
	S[niv]=n;
	if(K[n])
		future[n]=future[S[niv-K[n]]];
	for(size_t  i=0;i<G[n].size();++i)
		cerere(G[n][i],niv+1);
	
}
int main (){
	freopen("cerere.in","r",stdin);
	freopen("cerere.out","w",stdout);
	scanf("%d ",&n);
	for(i=1;i<=n;++i)
		scanf("%d",K[i]);
	for(i=1;i<n;i++){
		scanf("%d%d",&x,&y);
		G[x].push_back(y);
		VIZ[y]=1;
	}
	for(i=1;i<=n;++i){
		if(VIZ[i]==0){
			cerere(i,1);
		}
	}
	for(i=1;i<=n;++i)
		printf("%d ",future[i]);
	return 0;
}