Pagini recente » Cod sursa (job #2172164) | Cod sursa (job #1669256) | Cod sursa (job #1707887) | Cod sursa (job #1853339) | Cod sursa (job #508133)
Cod sursa(job #508133)
#include <fstream>
using namespace std;
const char InFile[]="cerere.in";
const char OutFile[]="cerere.out";
const int MaxN=100111;
ifstream fin(InFile);
ofstream fout(OutFile);
int viz[MaxN],T[MaxN],K[MaxN],N,x,y;
int dfs(int x)
{
if(viz[x]==0)
{
if(K[x]==0)
{
viz[x]=1;
}
else
{
int t=x;
for(register int i=0;i<K[x];++i)
{
t=T[t];
}
viz[x]=1+dfs(t);
}
}
return viz[x];
}
int main()
{
fin>>N;
for(register int i=1;i<=N;++i)
{
fin>>K[i];
}
for(register int i=1;i<N;++i)
{
fin>>x>>y;
T[y]=x;
}
fin.close();
for(register int i=1;i<=N;++i)
{
dfs(i);
}
for(register int i=1;i<=N;++i)
{
fout<<viz[i]-1<<" ";
}
fout.close();
return 0;
}