Pagini recente » Cod sursa (job #1402263) | Cod sursa (job #1985816) | Cod sursa (job #1374254) | Cod sursa (job #2099362) | Cod sursa (job #2360101)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector<int>a[100100];
int stiva[100100],v[100100],d[100100],k[100100],n,t[100100],start;
void dfs(int nod,int pas){
v[nod]=1;
stiva[pas]=nod;
d[nod]=1+d[stiva[pas-k[nod]]];
for(int i=0;i<a[nod].size();i++){
int vecin=a[nod][i];
if(v[vecin]==0){
dfs(vecin,pas+1);
}
}
}
int main(){
fin>>n;
for(int i=1;i<=n;i++){
fin>>k[i];
}
for(int i=1;i<n;i++){
int pi,pj;
fin>>pi>>pj;
a[pi].push_back(pj);
a[pj].push_back(pi);
t[pj]=pi;
}
for(int i=1;i<n;i++){
if(t[i]==0){
start=i;
break;
}
}
dfs(start,1);
for(int i=1;i<=n;i++){
fout<<d[i]-1<<" ";
}
}