Cod sursa(job #2572965)

Utilizator teomdn001Moldovan Teodor teomdn001 Data 5 martie 2020 15:12:13
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <vector>
#define VVI vector <vector <int> >
using namespace std;

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

const int MaxN = 100001;
VVI G;

int n, k[MaxN], tt[MaxN], rez[MaxN];
bool fii[MaxN];

void Citire();
int CautaRadacina();
void Dfs(int nod);

vector<int> v;

int main()
{
    Citire();
    int r = CautaRadacina();
    Dfs(r);
    for (int i = 1; i <= n; ++i)
        fout << rez[i] << ' ';

}

void Dfs(int nod)
{
    v.push_back(nod);
    for (int i = 0; i < G[nod].size(); ++i)
    {
        int vecin = G[nod][i];
        if (k[vecin] != 0)
            rez[vecin] = rez[v[v.size() - k[vecin]]] + 1;
        Dfs(vecin);
        v.pop_back();
    }
}

int CautaRadacina()
{
    for (int i = 1; i <= n; ++i)
    {
        if (!fii[i])
            return i;
    }
}

void Citire()
{
    fin >> n;
    for (int i = 1; i <= n; ++i)
        fin >> k[i];
    G = VVI(n + 1);
    for (int i = 1; i < n; ++i)
    {
        int x, y;
        fin >> x >> y;
        G[x].push_back(y);
        fii[y] = true;
    }
}