Pagini recente » Istoria paginii runda/winners24/clasament | Cod sursa (job #2398324)
#include <bits/stdc++.h>
#define Dim 100005
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int N,A[Dim],a,b;
int G[Dim],dx[Dim],root;
bool viz[Dim];
vector <int> V[Dim],B,L;
void DFS(int nod)
{
B.push_back(nod);
int lenght=B.size()-1;
if(B[lenght-A[nod]]!=nod)
G[nod]=G[B[lenght-A[nod]]]+1;
else
G[nod]=0;
viz[nod]=1;
for(unsigned int i=0;i<V[nod].size();i++)
{
int vecin=V[nod][i];
if(!viz[vecin])
{
DFS(vecin);
B.pop_back();
}
}
}
int main()
{
f>>N;
for(int i=1;i<=N;i++) f>>A[i];
for(int i=1;i<N;i++)
{
f>>a>>b;
V[a].push_back(b);
V[b].push_back(a);
dx[b]++;
}
for(int i=1;i<=N;i++)
if(!dx[i])
{
root=i;
break;
}
DFS(root);
for(int i=1;i<=N;i++) g<<G[i]<<" ";
return 0;
}