Cod sursa(job #651406)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 20 decembrie 2011 11:46:47
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 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]]]+1;
	for(int  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);
			break;
		}
	}
	for(i=1;i<=n;++i)
		printf("%d ",future[i]);
	return 0;
}