Pagini recente » Cod sursa (job #1337850) | Cod sursa (job #748033) | Cod sursa (job #2148570) | Cod sursa (job #1614484) | Cod sursa (job #2355055)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
const int NMAX = 100005;
int N;
int V[NMAX];
vector <int> G[NMAX];
vector <int> tree;
int results[NMAX], T[NMAX];
int root;
void Read(){
in >> N;
for(int i = 1; i <= N; ++i)
in >> V[i];
for(int i = 1; i <= N - 1; ++i){
int a, b;
in >> a >> b;
G[a].push_back(b);
T[b] = a;
}
for(int i = 1; i <= N; ++i){
if(T[i] == 0){
root = i;
break;
}
}
}
void DFS(int Nod){
if(V[Nod])
results[Nod] = results[tree[tree.size() - V[Nod]]] + 1;
tree.push_back(Nod);
for(int i = 0; i < (int) G[Nod].size(); ++i)
DFS(G[Nod][i]);
tree.pop_back();
}
void Print(){
for(int i = 1; i <= N; ++i)
out << results[i] << " ";
out << "\n";
}
int main(){
Read();
DFS(root);
Print();
return 0;
}