Pagini recente » Cod sursa (job #2475605) | Cod sursa (job #224363) | Cod sursa (job #2159479) | Cod sursa (job #3181065) | Cod sursa (job #2502141)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int Graf[16005];
int N, x, y, K[16005], G[16005];
void Read(){
fin>>N;
for(int i = 1; i <= N; i++) fin>>K[i];
for(int i = 1; i < N; i++){
fin>>x>>y;
Graf[y] = x;
}
}
void DFS(int nod){
if(K[nod]){
int nod1 = nod;
for(int i = 1; i <= K[nod]; i++)
nod1 = Graf[nod1];
if(G[nod1] || (!K[nod1] && !G[nod1]))
G[nod] = G[nod1] + 1;
else {
DFS(nod1);
G[nod] = G[nod1] + 1;
}
}
}
void Solve(){
for(int i = 1; i <= N; i++){
if(!G[i]) DFS(i);
fout<<G[i]<<' ';
}
}
int main()
{
Read();
Solve();
return 0;
}