Pagini recente » Cod sursa (job #2638304) | Cod sursa (job #565347) | Cod sursa (job #3276078) | Cod sursa (job #869363) | Cod sursa (job #927692)
Cod sursa(job #927692)
#include<cstdio>
#include<vector>
#define NMAX 100005
FILE *f=fopen("cerere.in","r");
FILE *g=fopen("cerere.out","w");
using namespace std;
vector <int> arb[NMAX];
int v[NMAX],fat[NMAX],n,sol[NMAX];
int r,stack[NMAX];
void read( void )
{
fscanf(f,"%d",&n);
for(int i(1); i <= n ; ++i )
fscanf(f,"%d",&v[i]);
r=n*(n+1)/2;
for(int i(1); i < n ; ++i )
{
int x,y;
fscanf(f,"%d%d",&x,&y);
fat[y]=x;
r-=y;
arb[x].push_back(y);
}
fclose(f);
}
void DFS(int node, int len )
{
if( v[node] == 0 )
{
sol[node]=0;
}
else
{
sol[node]=sol[stack[ len - v[node] ]] +1;
}
stack[len]=node;
for(int i(0); i <arb[node].size(); ++i )
DFS(arb[node][i],len+1);
}
void write( void )
{
for(int i(1); i <= n ; ++i )
fprintf(g,"%d ",sol[i]);
fclose(g);
}
int main ( void )
{
read();
DFS(r,1);
write();
return 0;
}