Pagini recente » Cod sursa (job #2697895) | Cod sursa (job #1146105) | Cod sursa (job #1962282) | Cod sursa (job #78960) | Cod sursa (job #2116220)
#include <bits/stdc++.h>
#define INF 2140000000
#define MOD 1000000007
#define MaxN 100005
using namespace std;
FILE*IN=fopen("cerere.in","r"),*OUT=fopen("cerere.out","w");
int f[MaxN],Root,N,anc[MaxN],X,Y,d[MaxN],Size,Stack[MaxN];
vector <int> Graph[MaxN];
void DFS(int node)
{
Stack[++Size]=node;
if(anc[node]!=0)
d[node]=1+d[Stack[Size-anc[node]]];
for(int i=0;i<Graph[node].size();i++)
DFS(Graph[node][i]);
Size--;
}
int main()
{
fscanf(IN,"%d",&N);
for(int i=1;i<=N;i++)
fscanf(IN,"%d",&anc[i]);
for(int i=1;i<N;i++)
{
fscanf(IN,"%d%d",&X,&Y);
f[Y]=X;
Graph[X].push_back(Y);
}
for(int i=1;i<=N;i++)
if(!f[i])
{
Root=i;
break;
}
DFS(Root);
for(int i=1;i<=N;i++)
fprintf(OUT,"%d ",d[i]);
return 0;
}