Cod sursa(job #2673376)

Utilizator Leonard123Mirt Leonard Leonard123 Data 16 noiembrie 2020 17:28:21
Problema Cerere Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<bits/stdc++.h>
#define maxn 100005
using namespace std;

int maimuta[maxn], stramos[maxn], nr[maxn], maimute, x, y;
vector <int> fii[maxn];

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

void rezolva(int nod) {
    int cauta = nod;
    while (maimuta[nod]--)
        cauta = stramos[cauta];
    nr[nod] = nr[cauta] + 1;
    if (cauta == nod)
        nr[cauta]--;
    for (auto fiu : fii[nod])
        rezolva(fiu);
}

int main() {
    fin >> maimute;
    for (int i = 1; i <= maimute; i++)
        fin >> maimuta[i];
    for (int j = 1; j < maimute; j++) {
        fin >> x >> y;
        stramos[y] = x;
        fii[x].push_back(y);
    }
    for (int i = 1; i <= maimute; i++)
        if (stramos[i] == 0) {
            rezolva(i);
            break;
        }
    for (int i = 1; i <= maimute; i++)
        fout << nr[i] << " ";
}