Pagini recente » Cod sursa (job #2109293) | Cod sursa (job #1882527) | Cod sursa (job #2818865) | Cod sursa (job #854416) | Cod sursa (job #2136174)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <iostream>
#define nmax 100005
using namespace std;
FILE *f=fopen("cerere.in","r");
FILE *g=fopen("cerere.out","w");
vector<int>Q[nmax],ancestors,stk;
int n,stramos[nmax],tata[nmax],intel[nmax],ceamaiinteligenta;
void read()
{
fscanf(f,"%d",&n);
for (int i=1; i<=n; ++i)
fscanf(f,"%d",&stramos[i]);
for (int i=1; i<n; ++i)
{
int a,b;
fscanf(f,"%d %d",&a,&b);
Q[a].push_back(b);
tata[b]=a;
}
}
void dfs(int nod)
{
stk.push_back(nod);
for (auto w:Q[nod])
{
if (stramos[w])
intel[w]=intel[stk[stk.size()-stramos[w]]]+1;
dfs(w);
}
stk.pop_back();
}
void solve()
{
for (int i=1; i<=n; ++i)
if (!tata[i])
ceamaiinteligenta=i;
dfs(ceamaiinteligenta);
for (int i=1; i<=n; ++i)
fprintf(g,"%d ",intel[i]);
}
int main()
{
read();
solve();
return 0;
}