Cod sursa(job #2777904)

Utilizator CaptnBananaPetcu Tudor CaptnBanana Data 25 septembrie 2021 21:26:22
Problema Cerere Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("cerere.in");
ofstream g("cerere.out");

const int N = 1e5 + 1;
int n, k[N], x, y, ans[N], tata[N], stramos[N];
vector<int> c[N];

void dfs(int nod, int distDeLaRadacina){
    stramos[distDeLaRadacina] = nod;
    ans[nod] = ans[stramos[distDeLaRadacina - k[nod]]] + 1;
    for(auto y: c[nod])
        dfs(y, distDeLaRadacina + 1);
}

int main(){
    f >> n;
    for(int i = 1; i <= n; i++){
        ans[i] = -1;
        f >> k[i];
    }

    for(int i = 1; i < n; i++){
        f >> x >> y;
        tata[y] = x;
        c[x].push_back(y);
    }

    f.close();
    for(int i = 1; i <= n; i++){
        if(tata[i] == 0){
            dfs(i, 0);
            break;
        }
    }

    for(int i = 1; i <= n; i++)
        g << ans[i] << ' ';

    g.close();
}