Pagini recente » Cod sursa (job #2619055) | Cod sursa (job #254027) | Cod sursa (job #3233902) | Cod sursa (job #941022) | Cod sursa (job #2663499)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int NMAX = 100005;
bool ver[NMAX],p[NMAX];
int rasp[NMAX],a[NMAX],n,x,y,nod=1;
vector <int> v[NMAX],st;
void dfs(int node){
ver[node]=true;
st.push_back(node);
if(a[node]==0) rasp[node]=0;
else rasp[node]=rasp[st[st.size()-1-a[node]]]+1;
for(int i=0;i<v[node].size();i++){
int vecin=v[node][i];
if(ver[vecin]==false){
dfs(vecin);
}
}
st.pop_back();
}
int main()
{
fin >> n;
for(int i=1;i<=n;i++) fin >> a[i];
for(int i=1;i<n;i++){
fin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
p[y]=true;
}
for(int i=1;i<=n;i++){
if(p[i]==false){
nod=i;
break;}
}
dfs(nod);
for(int i=1;i<=n;i++){
fout << rasp[i] << ' ';
}
return 0;
}