Cod sursa(job #2541704)

Utilizator CristiVintilacristian vintila CristiVintila Data 8 februarie 2020 18:59:01
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 100005
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");

int n, nrm[NMAX], r[NMAX], strmm[NMAX], rad;
vector<int> gr[NMAX], v;

void read() {
    fin >> n;
    for (int i = 1; i <= n; i++)
        fin >> strmm[i];
    for (int i = 1; i < n; i++) {
        int x, y;
        fin >> x >> y;
        gr[x].push_back(y);
        r[y] = x;
    }
}

void dfs(int nod, int t) {
    v.push_back(nod);
    
    if (strmm[nod] == 0)
        nrm[nod] = 0;
    else
        nrm[nod] = nrm[v[v.size() - strmm[nod] - 1]] + 1;
    
    for (int i = 0; i < gr[nod].size(); i++)
        if (gr[nod][i] != t)
            dfs(gr[nod][i], nod);
    
    v.pop_back();
}

int main(int argc, const char * argv[]) {
    read();
    rad = 1;
    while (r[rad])
        rad = r[rad];
    dfs(rad, 0);
    for (int i = 1; i <= n; i++)
        fout << nrm[i] << " ";
}