Cod sursa(job #2283798)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 15 noiembrie 2018 21:34:17
Problema Cerere Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
 
using namespace std;

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() {
    FILE *fin = fopen("cerere.in", "r");
    FILE *fout = fopen("cerere.out", "w");

    int n;
    fscanf(fin, "%d", &n);
 
    for(int i = 1; i <= n; i++) fscanf(fin, "%d", &v[i]);
    for(int i = 1; i <= n; i++) {
        int a, b;
        fscanf(fin, "%d %d", &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++) fprintf(fout, "%d ", D[i]);
 
    return 0;
}