4528 2023. 03. 29 12:48:09 Ablablabla Testnevelés óra cpp17 Elfogadva 50/50 264ms 37528 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";
    }
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 3ms 1812 KiB
2 Elfogadva 0/0 3ms 2004 KiB
3 Elfogadva 0/0 197ms 14776 KiB
4 Elfogadva 2/2 3ms 2436 KiB
5 Elfogadva 3/3 3ms 2640 KiB
6 Elfogadva 3/3 3ms 2980 KiB
7 Elfogadva 3/3 3ms 2944 KiB
8 Elfogadva 1/1 2ms 2948 KiB
9 Elfogadva 3/3 3ms 3096 KiB
10 Elfogadva 3/3 4ms 3076 KiB
11 Elfogadva 3/3 4ms 3220 KiB
12 Elfogadva 1/1 4ms 3248 KiB
13 Elfogadva 2/2 4ms 3264 KiB
14 Elfogadva 3/3 4ms 3456 KiB
15 Elfogadva 1/1 172ms 11492 KiB
16 Elfogadva 3/3 167ms 20980 KiB
17 Elfogadva 5/5 61ms 19672 KiB
18 Elfogadva 1/1 226ms 26584 KiB
19 Elfogadva 2/2 158ms 12068 KiB
20 Elfogadva 3/3 197ms 31364 KiB
21 Elfogadva 4/4 264ms 37528 KiB
22 Elfogadva 4/4 239ms 33992 KiB