179152025-09-22 22:25:52zhuyiTestnevelés óracpp17Hibás válasz 28/50189ms24276 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, k; cin >> n >> k;
    vector <vector <int>> g(n+1), g2;
    vector <int> be(n+1), kezd, folyt1, folyt2, vis(n+1);
    for(int i = 0; i < k; i++){
        int a, m; cin >> a >> m;
        g[a].push_back(m);
        be[m]++;
    }
    queue <int> q;
    for(int i = 1; i <= n; i++){
        if(be[i] == 0) q.push(i);
    }
    int s1 = -1, s2 = -1;
    while(!q.empty()){
        if(q.size() > 1){
            s1 = q.front();
            q.pop();
            s2 = q.front();
            break;
        }
        int u = q.front(); q.pop();
        vis[u] = 1;
        for(int v : g[u]){
            be[v]--;
            if(be[v] == 0){
                q.push(v);
            }
        }
        kezd.push_back(u);
    }
    while(!q.empty()) q.pop();
    g2 = g;
    if(s1 != -1){
        vector <int> tvis = vis;
        vector <int> tbe = be;
        q.push(s1);
        for(int i = 1; i <= n; i++) if(tbe[i] == 0 && i != s1) q.push(i);
        while(!q.empty()){
            int u = q.front(); q.pop();
            tvis[u] = 1;
            for(int v : g[u]){
                tbe[v]--;
                if(tbe[v] == 0) q.push(v);
            }
            folyt1.push_back(u);
        }
        for(int i = 1; i <= n; i++){
            if(tvis[i] == 0 && tbe[i] == 0) folyt1.push_back(i);
        }
    }
    if(s2 != -1){
        vector <int> tvis = vis;
        vector <int> tbe = be;
        q.push(s2);
        for(int i = 1; i <= n; i++) if(tbe[i] == 0 && i != s2) q.push(i);
        while(!q.empty()){
            int u = q.front(); q.pop();
            tvis[u] = 1;
            for(int v : g2[u]){
                tbe[v]--;
                if(tbe[v] == 0) q.push(v);
            }
            folyt2.push_back(u);
        }
        for(int i = 1; i <= n; i++){
            if(tvis[i] == 0 && tbe[i] == 0) folyt2.push_back(i);
        }
    }

    if(kezd.size() + folyt1.size() < n){
        cout << 0;
        return 0;
    }
    else if(kezd.size() == n){
        cout << 1 << "\n";
        for(int it : kezd) cout << it << " ";
    }
    else{
        cout << 2 << "\n";
        for(int it : kezd) cout << it << " ";
        for(int it : folyt1) cout << it << " ";
        cout << "\n";
        for(int it : kezd) cout << it << " ";
        for(int it : folyt2) cout << it << " ";
        //cout << s1 << " " << s2 << "\n";
    }
    return 0;
}









RészfeladatÖsszpontTesztVerdiktIdőMemória
base28/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva0/0115ms12972 KiB
4Hibás válasz0/21ms320 KiB
5Elfogadva3/31ms316 KiB
6Hibás válasz0/31ms316 KiB
7Elfogadva3/31ms316 KiB
8Elfogadva1/11ms316 KiB
9Elfogadva3/31ms316 KiB
10Hibás válasz0/32ms508 KiB
11Hibás válasz0/32ms564 KiB
12Elfogadva1/12ms564 KiB
13Elfogadva2/22ms316 KiB
14Elfogadva3/31ms564 KiB
15Elfogadva1/178ms7092 KiB
16Elfogadva3/3127ms19048 KiB
17Elfogadva5/556ms18804 KiB
18Elfogadva1/1165ms24188 KiB
19Elfogadva2/274ms7600 KiB
20Hibás válasz0/3189ms24276 KiB
21Hibás válasz0/4158ms23240 KiB
22Hibás válasz0/4158ms23240 KiB