Cod sursa(job #2502141)

Utilizator AteveuPescaru Andrei Ateveu Data 30 noiembrie 2019 13:22:26
Problema Cerere Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <vector>

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

int Graf[16005];
int N, x, y, K[16005], G[16005];


void Read(){
    fin>>N;
    for(int i = 1; i <= N; i++) fin>>K[i];
    for(int i = 1; i < N; i++){
        fin>>x>>y;
        Graf[y] = x;
    }
}

void DFS(int nod){
    if(K[nod]){
        int nod1 = nod;
        for(int i = 1; i <= K[nod]; i++)
            nod1 = Graf[nod1];
        if(G[nod1] || (!K[nod1] && !G[nod1]))
            G[nod] = G[nod1] + 1;
        else {
            DFS(nod1);
            G[nod] = G[nod1] + 1;
        }
    }
}

void Solve(){
    for(int i = 1; i <= N; i++){
        if(!G[i]) DFS(i);
        fout<<G[i]<<' ';
    }
}

int main()
{
    Read();
    Solve();
    return 0;
}