Cod sursa(job #2541133)

Utilizator AACthAirinei Andrei Cristian AACth Data 8 februarie 2020 10:08:00
Problema Cerere Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("cerere.in");
ofstream g("cerere.out");
int n;
int k[100001];
int parent[100001];
int who[100001];
int cnt[100001];
int main()
{
f>>n;
int i;
//return 0;
//cout<<n;
for(i=1;i<=n;i++)
        f>>k[i];
for(i=1;i<=n-1;i++)
{
    int n1,n2;
    f>>n1>>n2;
    parent[n2]=n1;
}
    for(i=1;i<=n;i++)
    {
        int nod=i;
        for(int j=1;j<=k[i];j++)
            nod=parent[nod];
        who[i]=nod;
    }
   // for(i=1;i<=n;i++)
      //  cout<<i<<' '<<who[i]<<'\n';
      for(i=1;i<=n;i++)
        cnt[i]=-1;
for(i=1;i<=n;i++)
{
    int cont=0;
    int nod=i;
    while(k[nod]!=0)
    {
        nod=who[nod],++cont;
        if(cnt[nod]!=-1)
        {
            cont+=cnt[nod];
            break;
        }
    }
        cnt[i]=cont;
    g<<cont<<' ';
}
    return 0;
}