Cod sursa(job #2542262)

Utilizator AACthAirinei Andrei Cristian AACth Data 9 februarie 2020 19:07:26
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n;
#define Nm 100001
int k[Nm],parent[Nm],ans[Nm];
vector < int > v[Nm];
vector < int > act;
void dfs(int nod){
    act.push_back(nod);
    ans[nod]=ans[act[act.size()-k[nod]-1]]+1;
    for(auto nod_m : v[nod])
        dfs(nod_m);
    act.pop_back();
}
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;
            break;
        }
    dfs(root);
    for(i=1; i<=n; i++)
        g<<ans[i]-1<<' ';
    return 0;
}