Cod sursa(job #2502135)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 30 noiembrie 2019 13:15:33
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<bits/stdc++.h>

using namespace std;

ifstream fin("cerere.in");
ofstream fout("cerere.out");

int K[100005];
int val[100005];
int T[100005];
vector<int> G[100005];
vector<int> stiva;

void dfs(int nod,int tata){
    int i;
    stiva.push_back(nod);
    if(K[nod] == 0){
        val[nod] = 0;
    }else{
        val[nod] = val[stiva[stiva.size()-1-K[nod]]]+1;
    }
    for(i = 0; i < G[nod].size(); i++){
        if(G[nod][i] != tata){
            dfs(G[nod][i],nod);
        }
    }
    stiva.pop_back();
}

int main(){
    int n,a1,a2,rad;
    fin>>n;
    for(int i = 1; i <= n; i++){
        fin>>K[i];
    }
    for(int i = 1; i <= n-1; i++){
        fin>>a1>>a2;
        G[a1].push_back(a2);
        T[a2] = a1;
    }
    rad = 1;
    while(T[rad] != 0){
        rad = T[rad];
    }
    dfs(rad,0);
    for(int i = 1; i <= n; i++){
        fout<<val[i]<<' ';
    }
    return 0;
}