Pagini recente » Cod sursa (job #1697142) | Cod sursa (job #169810) | Cod sursa (job #1529189) | Cod sursa (job #1311624) | Cod sursa (job #2841596)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n,str[100005],i,a,b,start,mark[100005],ni[100005];
short int ap[100005];
vector <int> v[100005];
void DFS(int start, int nivel){
ni[nivel] = start;
for(int i=0;i<v[start].size();i++){
if(str[v[start][i]]){
mark[v[start][i]] = mark[ni[nivel-str[v[start][i]]+1]] + 1;
}
DFS(v[start][i],nivel + 1);
}
}
int main()
{
fin>>n;
for(i=1;i<=n;i++){
fin>>str[i];
}
for(i=1;i<=n-1;i++){
fin>>a>>b;
v[a].push_back(b);
ap[b] = 1;
}
for(i=1;i<=n;i++){
if(!ap[i]){
start = i;
break;
}
}
DFS(start,1);
for(i=1;i<=n;i++){
fout << mark[i] << " ";
}
return 0;
}