Pagini recente » Cod sursa (job #1928753) | Cod sursa (job #847296) | Cod sursa (job #1866212) | Cod sursa (job #368956) | Cod sursa (job #1076835)
#include <iostream>
#include <cstdio>
#include <vector>
#define NMAX 100100
FILE *f,*g;
using namespace std;
int T[NMAX],C[NMAX],ST[NMAX],NR[NMAX],prim,ultim,radacina;
vector < int > V[NMAX];
void depth_first(int nod)
{
ultim ++;
ST[ultim] = nod;
NR[nod] = NR[ST[ultim-C[nod]]]+1;
int vec = V[nod].size();
for(int i=0 ; i<vec ; i++)
{
depth_first(V[nod][i]);
}
ultim --;
}
int main()
{
f = fopen("cerere.in","r");
int i,N,x,y;
fscanf(f,"%d\n",&N);
for(i=1 ; i<=N ; i++)
{
fscanf(f,"%d ",&C[i]);
}
for(i=1 ; i<N ; i++)
{
fscanf(f,"%d %d\n",&x,&y);
V[x].push_back(y);
T[y] = x;
}
fclose(f);
for(i=1 ; i<=N ; i++)
{
if(!T[i])
{
radacina = i;
break;
}
}
prim = 1;
depth_first(radacina);
g = fopen("cerere.out","w");
for(i=1 ; i<=N ; i++)
fprintf(g,"%d ",NR[i]-1);
fclose(g);
return 0;
}