Cod sursa(job #2674877)

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

int stramos[maxn], stramosi[maxn], maimute, x, y, nr;
bool tata[maxn];

vector <int> fii[maxn], lant;

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

void rezolva(int maimuta) {
    lant.push_back(maimuta);
    nr++;
    if (stramos[maimuta])
        stramosi[maimuta] = stramosi[lant[nr - stramos[maimuta] - 1]] + 1;
    for (auto fiu : fii[maimuta])
        rezolva(fiu);
    lant.pop_back();
    nr--;
}

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