Pagini recente » Cod sursa (job #2320218) | Cod sursa (job #142832) | Cod sursa (job #1820946) | Cod sursa (job #2561253) | Cod sursa (job #481372)
Cod sursa(job #481372)
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int NMAX = 100005;
int N;
int k[NMAX];
int pasi[NMAX];
int tata[NMAX];
vector<int> fii[NMAX];
int coada[NMAX];
int rad;
int viz[NMAX];
void citire()
{
int x, y;
cin >> N;
for(int i = 1 ; i <= N ; i++)
cin >> k[i];
for(int i = 1 ; i < N ; i++)
{
cin >> x >> y;
tata[y] = x;
fii[x].push_back(y);
}
}
void aflare_radacina()
{
for(int i = 1 ; i <= N ; i++)
if(!tata[i])
{
rad = i;
return;
}
}
void DFS(int nod, int nr)
{
coada[++nr] = nod;
if(!k[nod])
pasi[nod] = 0;
else
pasi[nod] = pasi[coada[nr - k[nod]]] + 1;
for(vector<int>:: iterator it = fii[nod].begin() ; it != fii[nod].end() ; it++)
if(!viz[*it])
DFS(*it, nr);
nr--;
}
void scrie()
{
for(int i = 1 ; i <= N ; i++)
printf("%d ", pasi[i]);
printf("\n");
}
int main()
{
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
citire();
aflare_radacina();
DFS(rad, 0);
scrie();
return 0;
}