Cod sursa(job #2079297)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 30 noiembrie 2017 22:19:29
Problema Strazi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream f("strazi.in");
ofstream g("strazi.out");

const int nmax = 260;
const int mmax = 7005;
vector<int> ls[nmax];
int last[nmax], viz[nmax];
int daddy[nmax], K, s2[nmax], n, m, x, y, i;
pair<int,int> sol[mmax];

void dfs(int x, int tt) {
    int l = ls[x].size(), i, y, cnt = 0;
    viz[x] = K;
    last[K] = x;
    if (tt!=x) daddy[x] = tt;
    for (i = 0; i < l; i++) {
        y = ls[x][i];
        if (viz[y]||cnt) continue;
        dfs(y, x);
        cnt++;
    }
}

int main() {
    f >> n >> m;
    while (m--) {
        f >> x >> y;
        ls[x].push_back(y);
    }
    for (i = 1; i <= n; i++)
        if (viz[i] == 0) {
            K++;
            daddy[i] = last[K-1];
            sol[K] = make_pair(daddy[i], i);
            dfs(i, i);
        }
    g << K-1 << '\n';
    for (i = 2; i <= K; i++)
        g << sol[i].first << ' ' << sol[i].second << '\n';

    x = last[K];
    m = 0;
    while (x) {
        s2[++m] = x;
        x = daddy[x];
    }
    for (i = m; i >= 1; i--)
        g << s2[i] << ' ';
}