Pagini recente » Cod sursa (job #1105602) | Cod sursa (job #1140420) | Cod sursa (job #1568649) | Cod sursa (job #1682678) | Cod sursa (job #1336886)
#include <cstdio>
#include <fstream>
#include <vector>
#define nmax 100005
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector <int> v[nmax];
int n,viz[nmax],st[nmax];
int sol[nmax],k[nmax],niv;
void dfs(int x)
{
for (vector <int> :: iterator it=v[x].begin();it!=v[x].end();it++) {
int y=*it;
if (viz[y]==0) {
viz[y]=1;
st[++niv]=y;
if (k[y]!=0)
sol[y]=sol[st[niv-k[y]]]+1;
dfs(y);
st[niv]=0;
niv--;
}
}
}
int main()
{
int i,a,b;
f>>n;
for (i=1;i<=n;i++)
f>>k[i];
for (i=1;i<=n-1;i++) {
f>>a>>b;
v[a].push_back(b);
}
for (i=1;i<=n;i++)
if (viz[i]==0) {
st[++niv]=i;
viz[i]=1;
dfs(i);
}
for (i=1;i<=n;i++) g<<sol[i]<<' ';
return 0;
}