Cod sursa(job #633238)

Utilizator Marius96Marius Gavrilescu Marius96 Data 13 noiembrie 2011 12:30:21
Problema Cerere Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include<cstdio>
#include<vector>
#define LEN 100005
using namespace std;

vector<int> v[LEN];
bool notroot[LEN];
int d[LEN],k[LEN],ans[LEN],p;

void dfs(int x){
	d[p]=x;
	if(k[x])
		ans[x]=ans[d[p-k[x]]]+1;
	for(int i=0;i<v[x].size();i++){
		++p;
		dfs(v[x][i]);
		--p;
	}
}

int main(){
	freopen("cerere.in","r",stdin);
	freopen("cerere.out","w",stdout);
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",k+i);
	for(int i=0;i<n-1;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		notroot[y]=1;
		v[x].push_back(y);
	}
	int r;
	for(r=1;r<=n;r++)
		if(!notroot[r])break;
	dfs(r);
	for(int i=1;i<=n;i++)
		printf("%d ",ans[i]);
}