Cod sursa(job #2774681)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 12 septembrie 2021 12:21:24
Problema Cerere Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<stdio.h>
#include<stdlib.h>
#define N 100001
int r,n,m,o[N],t[N],c[N],p[N],*g[N],w[N],i,j,d[N],a[N],b[N];
char s[10*N];
void D(int i)
{
    int j;
    for(d[i]=1,j=0;j<w[i];++j)
        o[m++]=g[i][j],p[g[i][j]]=p[o[m-1-c[g[i][j]]]]+1,D(g[i][j]),--m;
}
int main()
{
    freopen("cerere.in","r",stdin),freopen("cerere.out","w",stdout),scanf("%d\n",&n),gets(s);
    for(i=1,j=0;s[j];++j)
        if(s[j]>='0'&&s[j]<='9')
            c[i]=c[i]*10+(s[j]-'0');
        else
            ++i;
    for(i=1;i<n;++i)
        scanf("%d%d",a+i,b+i),++w[a[i]],t[b[i]]=a[i];
    for(i=1;i<=n;p[i]=-1,w[i++]=0)
        g[i]=(int*)malloc(4*w[i]);
    for(i=1;i<n;++i)
        g[a[i]][w[a[i]]++]=b[i];
    for(j=i=1;i<=n&&j;++i)
        if(!t[i])
            r=i,j=0;
    o[m++]=r,p[r]=0,D(r);
    for(i=1;i<=n;++i)
        printf("%d ",p[i]);
    return 0;
}