Cod sursa(job #987481)

Utilizator stefan.friptuPetru Stefan Friptu stefan.friptu Data 20 august 2013 19:44:25
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <cstdio>
#include <vector>

#define nmax 100005

using namespace std;

vector <int> e[nmax];
int k[nmax],gin[nmax],n1,n2,i,n,nr[nmax],st[nmax];
char v[nmax];

void dfs (int x)
{
	v[x]=1;
	st[++st[0]]=x;
	if(k[x]!=0)
		nr[x]=nr[st[st[0]-k[x]]]+1;
	for(int i=0;i<(int)e[x].size();i++)
        if(!v[e[x][i]])
			dfs(e[x][i]);
    st[0]--;
}
 
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",&n1,&n2);
        e[n1].push_back(n2);
        gin[n2]++;
    }
 
    for(i = 1; i <= n; i++)
        if(gin[i] == 0) dfs(i);
     
    for(i = 1; i <= n; i++) printf("%d ",nr[i]); printf("\n");
 
    return 0;
}