Pagini recente » Cod sursa (job #985079) | Cod sursa (job #1168847) | Cod sursa (job #2502186)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector <int> Graf[16005];
vector <int> s;
int N, x, y, K[16005], G[16005], TT[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[x].push_back(y);
TT[y] = x;
}
}
void DFS(int nod){
s.push_back(nod);
if(K[nod] == 0) G[nod] = 0;
else{
G[nod] = G[s.size() - 1 - K[nod]] + 1;
}
for(int i = 0; i < Graf[nod].size(); i++){
DFS(Graf[nod][i]);
}
s.pop_back();
}
void Solve(){
int r = 1;
while(TT[r] != 0) r = TT[r];
DFS(r);
}
void Write(){
for(int i = 1; i <= N; i++)
cout<<G[i]<<' ';
}
int main()
{
Read();
Solve();
Write();
return 0;
}