Cod sursa(job #1928621)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 16 martie 2017 16:10:21
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMax = 1e5 + 5;

vector < int > G[NMax];
bool viz[NMax];
int D[NMax];
int v[NMax];

deque < int > dq;
void DFS(const int &node) {
    dq.push_back(node);

    if(v[node] != 0) D[node] = D[dq[dq.size() - 1 - v[node]]] + 1;
    for(auto const &it: G[node]) DFS(it);

    dq.pop_back();
}

int main() {
    ios::sync_with_stdio();

    int n;
    fin >> n;

    for(int i = 1; i <= n; i++) fin >> v[i];
    for(int i = 1; i <= n; i++) {
        int a, b;
        fin >> a >> b;

        viz[b] = true;
        G[a].push_back(b);
    }

    int start;
    for(int i = 1; i <= n; i++) {
        if(viz[i] == false) {
            start = i;
            break;
        }
    }

    DFS(start);

    for(int i = 1; i <= n; i++) fout << D[i] << " ";

    return 0;
}