195322025-12-13 13:21:17algoproTestnevelés óracpp17Elfogadva 50/50140ms20024 KiB
// UUID: 6e9e3189-3a26-4cbd-a6c9-4543e31442d9
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

vector<int> sorrend;

bool dfs(int node, vector<vector<int>>& adj, vector<bool>& walked, vector<bool>& done) {
    walked[node] = 1;
    for(int adjacent : adj[node]) {
        if(walked[adjacent]) {
            if(!done[adjacent]) {
                return false; // KÖR
            }
            continue;
        }
        if(!dfs(adjacent, adj, walked, done)) return false; //KÖR

    }
    done[node] = 1;
    sorrend.push_back(node);
    return true;
}

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

    int n, k;
    cin >> n >> k;

    vector<vector<int>> adj(n+1);
    for(int i = 0; i < k; i++) {
        int u, v;
        cin >> u >> v;
        adj[v].push_back(u);
    }

    vector<bool> walked(n+1, 0);
    vector<bool> done(n+1, 0);
    bool loop = 0;
    int idx = 1;
    int switchable = -1;
    for(int i = 1; i <= n; i++) {
        if(!walked[i]) {
            if(!dfs(i, adj, walked, done)) loop = 1;
            if(switchable != -1) continue;

            for(idx; idx < sorrend.size(); idx++){
                bool can_switch = 1;
                for(int adjacent : adj[sorrend[idx]]) {
                    if(adjacent == sorrend[idx-1]) can_switch = 0;
                }
                if(can_switch) switchable = idx-1;
            }
        }
    }
    
    if(loop) {
        cout << "0\n";
    }
    else if(switchable != -1 && switchable != sorrend.size()-1) {
        cout << 2 << "\n";
        for(int i = 0; i < sorrend.size(); i++) {
            cout << sorrend[i] << " ";
        }
        cout << "\n";
        for(int i = 0; i < sorrend.size(); i++) {
            if(i == switchable) cout << sorrend[i+1] << " ";
            else if(i == switchable + 1) cout << sorrend[i-1] << " ";
            else cout << sorrend[i] << " ";
        }
    }
    else {
        cout << "1\n";
        for(int i = 0;i < sorrend.size(); i++) {
            cout << sorrend[i] << " ";
        }
    }
    
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva0/094ms6920 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva3/31ms508 KiB
8Elfogadva1/11ms316 KiB
9Elfogadva3/31ms316 KiB
10Elfogadva3/32ms316 KiB
11Elfogadva3/32ms504 KiB
12Elfogadva1/12ms476 KiB
13Elfogadva2/22ms316 KiB
14Elfogadva3/31ms316 KiB
15Elfogadva1/171ms4204 KiB
16Elfogadva3/381ms8368 KiB
17Elfogadva5/541ms8616 KiB
18Elfogadva1/1114ms11944 KiB
19Elfogadva2/271ms4528 KiB
20Elfogadva3/3114ms18452 KiB
21Elfogadva4/4140ms20024 KiB
22Elfogadva4/4112ms16804 KiB