286292026-05-25 16:43:46kukkermanTestnevelés óracpp17Elfogadva 50/50143ms23832 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>

using Emlekek = std::vector<std::pair<int, int>>;

void beolvas(int &n, Emlekek &emlekek, std::istream &be = std::cin) {
    int k;
    be >> n >> k;

    emlekek.resize(k);
    for (auto &e : emlekek) {
        be >> e.first >> e.second;
    }
}

using Graf = std::vector<std::vector<int>>;

bool topo_sorrend(int u, std::vector<int> &allapot, std::vector<int> &sorrend, const Graf &g) {
    if (allapot[u] == 1) {
        return false;
    }

    if (allapot[u] == 2) {
        return true;
    }

    allapot[u] = 1;
    for (const int v: g[u]) {
        if (!topo_sorrend(v, allapot, sorrend, g)) {
            return false;
        }
    }

    allapot[u] = 2;
    sorrend.push_back(u);

    return true;
}

bool van_el(int u, int v, const Graf &g) {
    return find(g[u].begin(), g[u].end(), v) != g[u].end();
}

void sorrend_ki(const std::vector<int> &sorrend) {
    using std::cout;

    for (const auto i: sorrend) {
        cout << i + 1 << ' ';
    }
    cout << '\n';
}

void tornasor_ki(int n, const Emlekek &emlekek) {
    Graf g(n);
    for (const auto [a, m]: emlekek) {
        g[a - 1].push_back(m - 1);
    }

    std::vector<int> allapot(n), sorrend;
    for (int u = 0; u < n; u++) {
        if (allapot[u] != 0) {
            continue;
        }

        if (!topo_sorrend(u, allapot, sorrend, g)) {
            sorrend.clear();
            break;
        }
    }

    using std::cout;

    if (sorrend.empty()) {
        cout << "0\n";

    } else {
        reverse(sorrend.begin(), sorrend.end());

        int i;
        for (i = 1; i < n && van_el(sorrend[i - 1], sorrend[i], g); i++) { }

        cout << (i == n ? '1' : '2') << '\n';

        sorrend_ki(sorrend);
        if (i < n) {
            std::swap(sorrend[i - 1], sorrend[i]);
            sorrend_ki(sorrend);
        }
    }
}

int main() {
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int n;
    Emlekek emlekek;
    beolvas(n, emlekek);
    tornasor_ki(n, emlekek);

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva0/086ms8872 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva3/31ms316 KiB
8Elfogadva1/11ms316 KiB
9Elfogadva3/31ms316 KiB
10Elfogadva3/32ms508 KiB
11Elfogadva3/32ms524 KiB
12Elfogadva1/12ms316 KiB
13Elfogadva2/22ms316 KiB
14Elfogadva3/31ms316 KiB
15Elfogadva1/172ms5916 KiB
16Elfogadva3/372ms11260 KiB
17Elfogadva5/537ms9252 KiB
18Elfogadva1/1119ms14660 KiB
19Elfogadva2/271ms6332 KiB
20Elfogadva3/3143ms18616 KiB
21Elfogadva4/4119ms23832 KiB
22Elfogadva4/4127ms20648 KiB