Cod sursa(job #2673091)

Utilizator BereaBerendea Andrei Berea Data 15 noiembrie 2020 19:08:17
Problema Cerere Scor 40
Compilator cpp-64 Status done
Runda ursus_retro_fara_alcool Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <cstdio>

using namespace std;
const int maxn=1e5;
int n,i,j,x,y,c;
int v[maxn],t[maxn];

void next();
void get(int & x);

int main()
{
    freopen("cerere.in","r",stdin);
    ofstream cout("cerere.out");
    //cin>>n;
    get(n);
    for (i=1;i<=n;i++) get(v[i]);
    for (i=1;i<n;i++)
    {
        //cin>>x>>y;
        get(x);
        get(y);
        t[y]=x;
    }
    for (i=1;i<=n;i++)
    {
        c=0;
        x=v[i];
        y=i;
        while (x!=0)
        {
            y=t[y];
            for (j=1;j<x;j++)
            {
                y=t[y];
            }
            x=v[y];
            c++;
        }
        cout<<c<<" ";
    }
}

const int limit=2000000000;
int r=limit-1;
char sir[limit];
bool semn=false;

void next()
{
    if (r++==limit) fread(sir,1,limit,stdin),r=0;
}

void get(int & x)
{
    x=0;
    semn=false;
    for (;sir[r]<'0' || sir[r]>'9';next()) if (sir[r]=='-') semn=true;
    for (x=0;sir[r]>='0' && sir[r]<='9';next()) x=x*10+sir[r]-'0';
}