Cod sursa(job #2541244)

Utilizator AACthAirinei Andrei Cristian AACth Data 8 februarie 2020 11:36:35
Problema Cerere Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 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];
vector < int > v[100001];
queue < int > c;
bool viz[100001];
void bfs(int start)
{
    c.push(start);
    while(!c.empty())
    {
        int nod=c.front();
        c.pop();
        if(viz[nod]==0)
        {
            viz[nod]=1;
            cnt[nod]=cnt[who[nod]]+1;
            for(auto nod_m : v[nod])
                c.push(nod_m);
        }
    }
}
int main()
{
f>>n;
int i;
for(i=1;i<=n;i++)
        f>>k[i];
for(i=1;i<=n-1;i++)
{
    int n1,n2;
    f>>n1>>n2;
    v[n1].push_back(n2);
    parent[n2]=n1;
}
int root;
    for(i=1;i<=n;i++)
    {
        if(parent[i]==0)
            root = i;
        int nod=i;
        for(int j=1;j<=k[i];j++)
            nod=parent[nod];
        who[i]=nod;
    }
      bfs(root);
      for(i=1;i<=n;i++)
    g<<cnt[i]-1<<' ';
    return 0;
}