Pagini recente » Cod sursa (job #2237896) | Cod sursa (job #2024270) | Cod sursa (job #425616) | Cod sursa (job #130025) | Cod sursa (job #2563820)
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 100001
using namespace std;
ifstream f("cerere.in");
ofstream o("cerere.out");
vector<int> g[nmax];
int i,n,x,y,k[nmax],sol[nmax],nodram[nmax]; // nodul de pe ramura curenta, pt fiecare nivel in parte
bool used[nmax];
void dfs(int x, int niv){
nodram[niv]=x;
if(k[x])
sol[x]=sol[nodram[niv-k[x]]]+1;
used[x]=true;
int l=g[x].size(),v;
for(int i=0;i<l;++i){
v=g[x][i];
if(!used[v])
dfs(v, niv+1);
}
}
int main()
{
f >> n;
for(i=1;i<=n;++i)
f >> k[i];
for(i=1;i<n;++i){
f >> x >> y;
g[x].push_back(y);
}
dfs(1,0);
for(i=1;i<=n;++i)
o << sol[i] << " ";
return 0;
}