Pagini recente » Cod sursa (job #526126) | Cod sursa (job #2175899) | Cod sursa (job #1646417) | Cod sursa (job #913767) | Cod sursa (job #2593388)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
queue <int> q[100010];
int a[100010],b[100010],t[100010],rad,n,i,j,k;
void dfs(int i)
{ if(a[i]==0) b[i]=0;
else
{ int y=i;
for(int j=1;j<=a[i];j++)
y=t[y];
b[i]=b[y]+1;//cout<<i<<" "<<y<<" "<<b[i]<<" "<<b[y]<<"\n";
}
while(!q[i].empty())
{ int x=q[i].front();
dfs(x);
q[i].pop();
}
}
int main()
{ f>>n;
for(k=1;k<=n;k++)
f>>a[k];
for(k=1;k<n;k++)
{f>>i>>j;
t[j]=i;
q[i].push(j);
}
rad=1;
while(t[rad]!=0) rad=t[rad];
dfs(rad);
for(i=1;i<=n;i++)
g<<b[i]<<" ";
return 0;
}