Cod sursa(job #3157411)

Utilizator SSKMFSS KMF SSKMF Data 15 octombrie 2023 15:04:47
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream cin ("cerere.in");
ofstream cout ("cerere.out");

int stramosi[100001] , trimis[100001] , durata[100001];
vector <int> adiacenta[100001];
bool eliminat[100001];

void DeterminareDurata (const int nod_actual)
{
    stramosi[++stramosi[0]] = nod_actual;

    if (trimis[nod_actual])
        durata[nod_actual] = durata[stramosi[stramosi[0] - trimis[nod_actual]]] + 1;

    for (auto nod_vecin : adiacenta[nod_actual])
        DeterminareDurata(nod_vecin);

    stramosi[0]--;
}

int main ()
{
    int numar_noduri;
    cin >> numar_noduri;

    for (int indice = 1 ; indice <= numar_noduri ; indice++)
        cin >> trimis[indice];

    for (int indice = 1 , nod[2] ; indice < numar_noduri ; indice++)
        { cin >> nod[0] >> nod[1]; adiacenta[nod[0]].push_back(nod[1]); eliminat[nod[1]] = true; }

    int radacina = 1;
    while (eliminat[radacina])
        radacina++;

    DeterminareDurata(radacina);

    for (int indice = 1 ; indice <= numar_noduri ; indice++)
        cout << durata[indice] << ' ';

    cout.close(); cin.close();
    return 0;
}