Cod sursa(job #1942205)

Utilizator GeorginskyGeorge Georginsky Data 27 martie 2017 21:06:32
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <iostream>
#include <fstream>
#define N 100005
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
int n, v[N], tree[N], r[N];

int ancestor(int x, int k){
    for(int i=1; i<=k; i++)x=tree[x];
    return x;
}

int main(){
    in>>n;
    int x, y;
    for(int i=1; i<=n; i++)in>>v[i],r[i]=-1;
    for(int i=1; i<=n; i++){
        in>>x>>y;
        tree[y]=x;
    }
    int node, vn;
    bool z;
    for(int i=1; i<=n; i++){
        node=i, vn=0;
        z=false;
        while(v[node]!=0){
            node=ancestor(node, v[node]);
            vn++;
            if(r[node]!=-1){
                z=true;
                r[i]=r[node]+vn;
                break;
            }
        }
        if(!z)r[i]=vn;
    }
    for(int i=1; i<=n; i++)out<<r[i]<<" ";
    return 0;
}