Pagini recente » Cod sursa (job #1642368) | Cod sursa (job #2671293) | Cod sursa (job #286085) | Cod sursa (job #2283798) | Cod sursa (job #2321168)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n,i,j,a,b,ans[100010],k[100010],t[100010][30];
vector<int> v[100010];
void dfs(int poz)
{
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])
dfs(it);
}
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;
break;
}
dfs(i);
// 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;
}