45282023-03-29 12:48:09AblablablaTestnevelés óracpp17Accepted 50/50264ms37528 KiB
#include <bits/stdc++.h>

using namespace std;

int n, m;
vector<vector<int>> csucsok;
vector<int> bejar;
bool jo = true;

void dfs(int kezd){
    bejar[kezd] = 1;
    for(int x : csucsok[kezd]){
        if(bejar[x] == 1){
            jo = false;
        } else if(bejar[x] == 0){
            dfs(x);
        }
    }
    bejar[kezd] = 2;
}

int main()
{
    cin >> n >> m;
    vector<int> beDB(n + 1, 0);
    csucsok.assign(n + 1, vector<int>(0, 0));
    for(int i = 0; i < m; i++){
        int a, b;
        cin >> a >> b;
        csucsok[a].push_back(b);
        beDB[b]++;
    }

    bejar.assign(n, 0);

    for(int i = 0; i < n; i++){
        if(bejar[i] == 0){
            dfs(i);
        }
    }

    if(!jo){
        cout << "0\n";
        return 0;
    }

    queue<int> kezdok;

    for(int i = 1; i <= n; i++){
        if(beDB[i] == 0){
            kezdok.push(i);
        }
    }

    vector<int> topi;

    while(!kezdok.empty()){
        int akt = kezdok.front();
        kezdok.pop();

        for(int x : csucsok[akt]){
            beDB[x]--;
            if(beDB[x] == 0){
                kezdok.push(x);
            }
        }

        topi.push_back(akt);
    }


    bool jo = true;
    int rosszind = 0;
    for(int i = 0; i < n-1; i++){
        bool talal = false;
        for(int x : csucsok[topi[i]]){
            if(x == topi[i + 1]){
                talal = true;
                break;
            }
        }

        if(!talal){
            jo = false;
            rosszind = i;
            break;
        }
    }

    if(jo){
        cout << "1\n";
        for(int x : topi){
            cout << x << " ";
        }

        cout << "\n";
    } else{
        cout << "2\n";
        for(int i = 0; i < n; i++){
            cout << topi[i] << " ";
        }
        cout << "\n";

        for(int i = 0; i < n; i++){
            if(i == rosszind){
                cout << topi[i + 1] << " ";
            } else if(i == rosszind + 1){
                cout << topi[i - 1] << " ";
            } else{
                cout << topi[i] << " ";
            }
        }

        cout << "\n";
    }
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/03ms1812 KiB
2Accepted0/03ms2004 KiB
3Accepted0/0197ms14776 KiB
4Accepted2/23ms2436 KiB
5Accepted3/33ms2640 KiB
6Accepted3/33ms2980 KiB
7Accepted3/33ms2944 KiB
8Accepted1/12ms2948 KiB
9Accepted3/33ms3096 KiB
10Accepted3/34ms3076 KiB
11Accepted3/34ms3220 KiB
12Accepted1/14ms3248 KiB
13Accepted2/24ms3264 KiB
14Accepted3/34ms3456 KiB
15Accepted1/1172ms11492 KiB
16Accepted3/3167ms20980 KiB
17Accepted5/561ms19672 KiB
18Accepted1/1226ms26584 KiB
19Accepted2/2158ms12068 KiB
20Accepted3/3197ms31364 KiB
21Accepted4/4264ms37528 KiB
22Accepted4/4239ms33992 KiB