Pagini recente » Cod sursa (job #1672966) | Cod sursa (job #2953519) | Cod sursa (job #112807) | Cod sursa (job #715762) | Cod sursa (job #1153964)
#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;
for(i=0;i<Muchie[nod].size();i++){
vecin=Muchie[nod][i];
if(v[vecin])
Sol[vecin]=1+Sol[Stack[0]-v[vecin]+1];
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;
}