Pagini recente » Cod sursa (job #1212765) | Cod sursa (job #2184156) | Cod sursa (job #1011423) | Cod sursa (job #1814952) | Cod sursa (job #1153970)
#include<fstream>
#include<vector>
#define NMAX 100100
using namespace std;
int v[NMAX],Sol[NMAX],N,radacina,Stack[NMAX];
bool tata[NMAX];
vector <int> Muchie[NMAX];
void citire() {
ifstream in("cerere.in");
int i,x,y;
in>>N;
for(i=1;i<=N;i++)
in>>v[i];
for(i=1;i<=N-1;i++){
in>>x>>y;
Muchie[x].push_back(y);
tata[y]=1;
}
in.close();
}
void dfs(int nod) {
int vecin,i;
Stack[0]++;
Stack[Stack[0]]=nod;
if(v[nod])
Sol[nod]=1+Sol[Stack[0]-v[nod]];
for(i=0;i<Muchie[nod].size();i++){
vecin=Muchie[nod][i];
dfs(vecin);
}
Stack[0]--;
}
void solve() {
int i;
for(i=1;i<=N;i++)
if(!tata[i])
radacina=i;
dfs(radacina);
}
void afisare() {
ofstream out("cerere.out");
int i;
for(i=1;i<=N;i++)
out<<Sol[i]<<' ';
out<<'\n';
out.close();
}
int main(){
citire();
solve();
afisare();
return 0;
}