Pagini recente » Cod sursa (job #2346950) | Cod sursa (job #3268426) | Cod sursa (job #185773) | Cod sursa (job #318685) | Cod sursa (job #3252061)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int nmax=100005;
int n,x,y,str[nmax],strv[nmax];
bitset<nmax>vas,nustr;
vector<int>spate,tree[nmax];
void dfs(int nod,int in){
vas[nod]=1;
spate.push_back(nod);
strv[nod]=1+strv[spate[in-str[nod]]];
for(int i:tree[nod]){
if(!vas[i]){
dfs(i,in+1);
}
}
spate.resize(spate.size()-1);
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++){
fin>>str[i];
strv[i]=-1;
}
for(int i=1;i<n;i++){
fin>>x>>y;
nustr[y]=1;
tree[x].push_back(y);
tree[y].push_back(x);
}
for(int i=1;i<=n;i++){
if(!nustr[i]){
dfs(i,0);
break;
}
}
for(int i=1;i<=n;i++){
fout<<strv[i]<<' ';
}
return 0;
}