Pagini recente » Cod sursa (job #2199380) | Cod sursa (job #1851121) | Cod sursa (job #2724312) | Cod sursa (job #2216395) | Cod sursa (job #1744753)
#include <iostream>
#include<fstream>
#include<vector>
#include<bitset>
using namespace std;
int s[18][100005],sortop[100005],kk,a,b,i,j,n,k[100005],nr[100005],node,source;
vector<int> v[100005];
bitset<100005> noroot;
void dfs(int x)
{
kk++;
sortop[kk]=x;
for(int i=0;i<v[x].size();i++)
dfs(v[x][i]);
}
int main()
{
ifstream f("cerere.in");
ofstream g("cerere.out");
f>>n;
for(i=1;i<=n;i++)
f>>k[i];
for(i=1;i<=n-1;i++)
{
f>>a>>b;
v[a].push_back(b);
s[0][b]=a;
noroot[b]=1;
}
for(i=1;i<=n&&node==0;i++)
if(!noroot[i])
node=i;
dfs(node);
for(i=1;i<=n;i++)
{
node=sortop[i];
for(j=1;(1<<j)<=n;j++)
{
s[j][node]=s[j-1][s[j-1][node]];
}
if(k[node]==0) {nr[node]=0;continue;}
source=node;
for(j=0;(1<<j)<=k[node];j++)
{
if(k[node]&(1<<j))
source=s[j][source];
}
nr[node]=nr[source]+1;
}
for(i=1;i<=n;i++)
g<<nr[i]<<' ';
return 0;
}