Pagini recente » Cod sursa (job #1827157) | Cod sursa (job #829225) | Cod sursa (job #2637172) | Cod sursa (job #2251932) | Cod sursa (job #2542240)
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n;
int t[NMAX];
int val[NMAX];
int sol[NMAX];
vector<int> ma[NMAX];
vector<int> S;
void citire()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>val[i];
}
for(int i=1;i<=n-1;i++)
{
int x,y;
fin>>x>>y;
t[y] = x;
ma[x].push_back(y);
}
}
void DFS(int n)
{
S.push_back(n);
if(val[n]!=0)
sol[n] = sol[S.size()-1-val[n]]+1;
for(int i=0;i<ma[n].size();i++)
DFS(ma[n][i]);
S.pop_back();
}
void rezolva()
{
int r;
for(int i=1;i<=n;i++)
{
if(!t[i])
{
r = i;
break;
}
}
DFS(r);
for(int i=1;i<=n;i++)
fout<<sol[i]<<" ";
}
int main()
{
citire();
rezolva();
}