Cod sursa(job #2283806)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 15 noiembrie 2018 21:42:24
Problema Cerere Scor 85
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <vector>

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];
int dq[NMax];

int dqPos = 0;
void DFS(const int &node) {
    dq[dqPos++] = node;
 
    if(v[node] != 0) D[node] = D[dq[dqPos - 1 - v[node]]] + 1;
    for(auto const &it: G[node]) DFS(it);
 
    --dqPos;
}
 
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);
    }
    fin.close();
 
    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] << " ";
    fout.close();
    return 0;
}