Cod sursa(job #1076663)

Utilizator livliviLivia Magureanu livlivi Data 10 ianuarie 2014 14:44:47
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<cstdio>
using namespace std;
int v1[100001],v2[100001],v3[100001],v4[100001];
int meow(int x,int i){
    if (i==0) return x;
    return meow(v2[x],i-1);
}
int ala_baba(int x){
    if (v3[x]==0) return 1;
    if (v4[x]!=0) return v4[x];
    return 1+ala_baba(v3[x]);
}
int main(){
    freopen ("cerere.in","r",stdin);
    freopen ("cerere.out","w",stdout);
    int n,i,a,b;
    scanf ("%d",&n);
    for(i=1;i<=n;i++)
        scanf ("%d",&v1[i]);
    for(i=1;i<n;i++){
        scanf ("%d%d",&a,&b);
        v2[b]=a;
    }
    for(i=1;i<=n;i++){
        if (v1[i]==0) v3[i]=0;
        else v3[i]=meow(i,v1[i]);
    }
    for(i=1;i<=n;i++){
        if (v3[i]==0) v4[i]=1;
        v4[i]=ala_baba(i);
    }
    for(i=1;i<=n;i++)
        printf ("%d ",v4[i]-1);
    return 0;
}