Cod sursa(job #1388921)

Utilizator tudoras8tudoras8 tudoras8 Data 15 martie 2015 20:15:12
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <map>

using namespace std;

const int MAXN = 250010, MAXM = 300010;

int N, M;
int st[MAXN];
vector<int> adj[MAXN], vf, v;
bool viz[MAXN];
map<int, vector<int> > stramos;

void dfs(int u, int nivel = 0) {
    st[nivel] = u;
    viz[u] = true;

    if (stramos.find(u) != stramos.end()) {
        for (int a : stramos[u]) {
            cout << st[nivel - a] << '\n';
        }
    }

    for (int v : adj[u]) {
        if (!viz[v]) {
            dfs(v, nivel + 1);
        }
    }
}

int main()
{
    int t, Q, P;

    ifstream f("stramosi.in");
    freopen("stramosi.out", "w", stdout);
    f >> N >> M;

    for (int i = 1; i <= N; i++) {
        f >> t;

        if (t == 0) vf.push_back(i);
        else adj[t].push_back(i);
    }

    for (int i = 0; i < M; i++) {
        f >> P >> Q;
        stramos[P].push_back(Q);
    }
    for (int x : vf) {
        dfs(x);
    }

    f.close();
    return 0;
}