Cod sursa(job #2437697)

Utilizator Alex_BubBuburuzan Alexandru Alex_Bub Data 10 iulie 2019 00:42:21
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int NMax = 1e5;

vector <int> G[NMax + 5], S;
int N, K[NMax + 5], DP[NMax + 5], R;

void DFS(int Nod)
{
    S.push_back(Nod);
    DP[Nod] = DP[S[S.size() - K[Nod] - 1]] + 1;

    for(auto Vecin : G[Nod])
        DFS(Vecin);

    S.pop_back();
}

int main()
{
    fin >> N;

    for(int i = 1; i <= N; i++)
        fin >> K[i], DP[i] = -1, R ^= i;

    for(int i = 1, a, b; i < N; i++)
    {
        fin >> a >> b;

        G[a].push_back(b);
        R ^= b;
    }
    DFS(R);

    for(int i = 1; i <= N; i++)
        fout << DP[i] << " ";

    fin.close();
    fout.close();

    return 0;
}