Pagini recente » Cod sursa (job #766409) | Cod sursa (job #1734078) | Cod sursa (job #1119778) | Cod sursa (job #431954) | Cod sursa (job #2321176)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n,i,j,a,b,root,ans[100010],k[100010],t[100010][30];
vector<int> v[100010];
queue<int> q;
int main()
{
f>>n;
for(i=1; i<=n; i++)
f>>k[i];
for(i=1; i<n; i++)
{
f>>a>>b;
t[b][0]=a;
v[a].push_back(b);
}
for(i=1; i<=n; i++)
if(!t[i][0])
{
t[i][0]=i;
root=i;
break;
}
q.push(root);
while(q.size())
{
int poz=q.front();
q.pop();
for(i=1; i<=20; i++)
t[poz][i]=t[t[poz][i-1]][i-1];
i=0;
int aux=poz;
while(k[poz])
{
if(k[poz]&1)
aux=t[aux][i];
i++;
k[poz]>>=1;
}
ans[poz]=ans[aux]+1;
for(auto it:v[poz])
q.push(it);
}
// for(i=1;i<=n;i++)
// {
// g<<i<<": ";
// for(j=0;j<=5;j++)
// g<<t[i][j]<<" , ";
// g<<'\n';
// }
// g<<'\n';
for(i=1; i<=n; i++)
g<<ans[i]-1<<' ';
return 0;
}