Pagini recente » Cod sursa (job #1040662) | Cod sursa (job #1363271) | Cod sursa (job #1349516) | Cod sursa (job #2157544) | Cod sursa (job #3351166)
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int nm=1e5+5;
vector<vector<int>> adj;
int v[nm], v2[nm], pr[nm], f[nm], ver[nm];
int pz=0;
void dfs(int x)
{
pr[x]=v2[pz-v[x]];
if(adj[x].size()==0)
return;
for(int y:adj[x])
{
v2[++pz]=y;
dfs(y);
pz--;
}
}
signed main()
{
ifstream cin("cerere.in");
ofstream cout("cerere.out");
int n, rt, a, b;
cin>>n;
adj.resize(n+1);
for(int i=1; i<=n; i++)
cin>>v[i];
for(int i=1; i<n; i++)
{
cin>>a>>b;
adj[a].push_back(b);
f[b]++;
}
for(int i=1; i<=n; i++)
{
if(f[i]==0)
{
rt=i;
break;
}
}
v2[++pz]=rt;
dfs(rt);
for(int i=1; i<=n; i++)
{
if(ver[i]==0)
{
int x=i, rez=0, y;
while(pr[x]!=x)
{
x=pr[x];
rez++;
if(ver[x]!=0)
{
rez+=ver[x];
break;
}
}
ver[i]=rez;
cout<<rez<<" ";
}
else
cout<<ver[i]<<" ";
}
return 0;
}