Cod sursa(job #515224)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 20 decembrie 2010 19:09:43
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>
#include<vector>
using namespace std;

FILE*f=fopen("cerere.in","r");
FILE*g=fopen("cerere.out","w");

int A[100005],ST,C[100005],N,i,a,b,K[100005],z;
char T[100005];
vector<int>W[100005];

void dfs(int nod){
	A[++ST] = nod;
	if ( !K[nod] )
		C[nod] = 0;
	else
		C[ nod ] = C[ A[ ST - K[nod] ] ] + 1;
	vector<int>::iterator itt;
	for ( itt = W[nod].begin(); itt != W[nod].end() ; ++itt ){
		z = *itt;
		dfs(z);
	}
	--ST;
}

int main () {
	
	fscanf(f,"%d",&N);
	for ( i = 1 ; i <= N ; ++i )
		fscanf(f,"%d",&K[i]);
	for ( i = 1 ; i < N ; ++i ){
		fscanf(f,"%d %d",&a,&b);
		W[a].push_back(b);
		T[b] = 1;
	}
	for ( i = 1 ; i <= N ; ++i ){
		if ( !T[i] )
			break;
	}
	dfs(i);
	
	for ( i = 1 ; i <= N ; ++i ){
		fprintf(g,"%d ",C[i]);
	}
	
	fclose(f);
	fclose(g);
	
	return 0;
}