Pagini recente » Cod sursa (job #73987) | Cod sursa (job #485051) | Cod sursa (job #1641444) | Cod sursa (job #1711566) | Cod sursa (job #2283889)
#include <bits/stdc++.h>
#define Dim 100006
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector < int > Vf[Dim];
int N,a,b,G[Dim],Grad[Dim],Dist[Dim],Ord[Dim];
int rad;
void DFS(int nod,int nr)
{
int po;
if(Dist[nod])
G[nod]=G[Ord[nr-Dist[nod]]]+1;
else
G[nod]=0;
for(po=0;po<Vf[nod].size();po++)
{
Ord[nr]=nod;
DFS(Vf[nod][po],nr+1);
}
}
int main()
{
f>>N;
for(int i=1;i<=N;i++) f>>Dist[i];
for(int i=1;i<=N;i++)
{
f>>a>>b;
Grad[b]+=1;
Vf[a].push_back(b);
}
bool stop=0;
for(int i=1;i<=N&&stop==0;i++)
if(Grad[i]==0)
{
stop=1;
rad=i;
}
G[rad]=0;
DFS(rad,1);
for(int i=1;i<=N;i++) g<<G[i]<<" ";
return 0;
}