Cod sursa(job #562723)

Utilizator Robert29FMI Tilica Robert Robert29 Data 23 martie 2011 19:23:45
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<stdio.h>
#include<vector>
using namespace  std;
FILE*f=fopen("cerere.in","r");
FILE*g=fopen("cerere.out","w");

vector <int> v[100001];
int sol[100001],k,n,x,y,w[100001],j,s[100001],i;
char viz[100001];

void dfs(int nod,int niv){


	viz[nod]=1;
	s[niv]=nod;
	if(w[nod])
		sol[nod]=sol[s[niv-w[nod]]]+1;
	else
		sol[nod]=0;
	for(int i=0;i<v[nod].size();++i)
		if(viz[v[nod][i]]==0)
			dfs(v[nod][i],niv+1);
		

}
int main() {
	fscanf(f,"%d",&n);
	for(i=1;i<=n;++i)
		fscanf(f,"%d",&w[i]);
	
	for(i=1;i<n;++i){
		fscanf(f,"%d%d",&x,&y);
		v[x].push_back (y); 
	}
	
	for(i=1;i<=n;++i)
		if(viz[i]==0)
			dfs(i,1);
		
		
		
	for(i=1;i<=n;++i)
		fprintf(g,"%d ",sol[i]);
	fclose(g);
	fclose(f);
	return 0;
}