Pagini recente » Cod sursa (job #1025404) | Cod sursa (job #2898030) | Cod sursa (job #3236089) | Cod sursa (job #2373646) | Cod sursa (job #2541244)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n;
int k[100001];
int parent[100001];
int who[100001];
int cnt[100001];
vector < int > v[100001];
queue < int > c;
bool viz[100001];
void bfs(int start)
{
c.push(start);
while(!c.empty())
{
int nod=c.front();
c.pop();
if(viz[nod]==0)
{
viz[nod]=1;
cnt[nod]=cnt[who[nod]]+1;
for(auto nod_m : v[nod])
c.push(nod_m);
}
}
}
int main()
{
f>>n;
int i;
for(i=1;i<=n;i++)
f>>k[i];
for(i=1;i<=n-1;i++)
{
int n1,n2;
f>>n1>>n2;
v[n1].push_back(n2);
parent[n2]=n1;
}
int root;
for(i=1;i<=n;i++)
{
if(parent[i]==0)
root = i;
int nod=i;
for(int j=1;j<=k[i];j++)
nod=parent[nod];
who[i]=nod;
}
bfs(root);
for(i=1;i<=n;i++)
g<<cnt[i]-1<<' ';
return 0;
}