Pagini recente » Cod sursa (job #1122653) | Cod sursa (job #3158550) | Cod sursa (job #2835209) | Cod sursa (job #1803682) | Cod sursa (job #844823)
Cod sursa(job #844823)
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
int pp,val,ce,a1,b1,l,n,i,p[100007],t[100007],k[100007],tk[100007],d[100007];
char str[7000009];
vector < int > v[100007];
queue < int > cc;
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d\n",&n);
gets(str+1);
pp=1;
for(i=1;i<=n;i++)
{
while(str[pp]>='0'&&str[pp]<='9')
{
k[i]=k[i]*10+str[pp]-48;
pp++;
}
pp++;
}
for(i=1;i<n;i++)
{
gets(str+1);
l=strlen(str+1);
pp=1;
a1=0;
while(str[pp]!=' ')
{
a1=a1*10+str[pp]-48;
pp++;
}
pp++;
b1=0;
while(pp<=l)
{
b1=b1*10+str[pp]-48;
pp++;
}
t[b1]=a1;
v[a1].push_back(b1);
}
i=1;
while(t[i]!=0) i=t[i];
p[1]=i;
l=1;
while(1)
{
if(v[p[l]].empty())
{
l--;
if(l==0) break;
}
else
{
l++;
p[l]=v[p[l-1]][0];
v[p[l-1]].erase(v[p[l-1]].begin());
tk[p[l]]=p[l-k[p[l]]];
}
}
tk[p[1]]=p[1];
for(i=1;i<=n;i++)
v[tk[i]].push_back(i);
for(i=1;i<=n;i++)
if(k[i]==0)
{
cc.push(i);
d[i]=1;
while(!cc.empty())
{
val=cc.front();
for(ce=0;ce<v[val].size();ce++)
if(d[v[val][ce]]==0)
{
d[v[val][ce]]=d[val]+1;
cc.push(v[val][ce]);
}
cc.pop();
}
}
for(i=1;i<=n;i++)
printf("%d ",d[i]-1);
return 0;
}