Cod sursa(job #2502186)

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

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

vector <int> Graf[16005];
vector <int> s;
int N, x, y, K[16005], G[16005], TT[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[x].push_back(y);
        TT[y] = x;
    }
}

void DFS(int nod){
    s.push_back(nod);
    if(K[nod] == 0) G[nod] = 0;
    else{
        G[nod] = G[s.size() - 1 - K[nod]] + 1;
    }
    for(int i = 0; i < Graf[nod].size(); i++){
        DFS(Graf[nod][i]);
    }
    s.pop_back();
}

void Solve(){
    int r = 1;
    while(TT[r] != 0) r = TT[r];
    DFS(r);
}

void Write(){
    for(int i = 1; i <= N; i++)
        cout<<G[i]<<' ';
}

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