Pagini recente » 17 | Cod sursa (job #2080978) | Cod sursa (job #2275347) | Cod sursa (job #2804814) | Cod sursa (job #2258261)
#include <fstream>
#include <vector>
#include <cstring>
#define maxn 100002
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n, t[maxn], t1[maxn], dp[maxn], v[maxn], vf;
void dfs(int nod)
{
if(dp[t[nod]]==-1)
{
dfs(t[nod]);
}
dp[nod]=dp[t[nod]]+1;
}
int main()
{
fin>>n;
for(int i=1; i<=n; i++)
{
fin>>v[i];
if(v[i])
{
dp[i]=-1;
}
else
{
dp[i]=0;
}
}
for(int i=1, x, y; i<n; i++)
{
fin>>x>>y;
t[y]=x;
}
for(int i=1; i<=n; i++)
{
if(v[i])
{
int nod=i;
while(v[i]--)
{
nod=t[nod];
}
t1[i]=nod;
}
}
memcpy(t, t1, sizeof t1);
for(int i=1; i<=n; i++)
{
if(dp[i]==-1)
{
dfs(i);
}
fout<<dp[i]<<' ';
}
return 0;
}