180252025-09-25 15:36:05algoproTestnevelés óracpp17Elfogadva 50/50209ms49736 KiB
// UUID: 2a20c6bd-6ebe-4414-9630-9df6a5844397
#include <bits/stdc++.h>
using namespace std;

int n,m,cycle=0;
vector<vector<int>> g;
vector<int> st,topo;

void dfs(int u){
    st[u]=1;
    for(int v:g[u]){
        if(st[v]==0) dfs(v);
        else if(st[v]==1) cycle=1;
    }
    st[u]=2;
    topo.push_back(u);
}

int main(){
    ios::sync_with_stdio(0);cin.tie(0);
    cin>>n>>m;
    g.assign(n+1,{});
    for(int i=0,a,b;i<m;i++){
        cin>>a>>b;
        g[a].push_back(b);
    }
    st.assign(n+1,0);
    for(int i=1;i<=n;i++) if(!st[i]) dfs(i);
    if(cycle){ cout<<0<<"\n"; return 0; }

    reverse(topo.begin(),topo.end());

    // gyors él-ellenőrzéshez set vagy unordered_set
    vector<unordered_set<int>> E(n+1);
    for(int u=1;u<=n;u++) for(int v:g[u]) E[u].insert(v);

    int sw=-1;
    for(int i=0;i<n-1;i++){
        int u=topo[i], v=topo[i+1];
        if(!E[u].count(v)){ sw=i; break; }
    }

    if(sw==-1){
        cout<<1<<"\n";
        for(int i=0;i<n;i++) cout<<topo[i]<<" \n"[i==n-1];
    }else{
        cout<<2<<"\n";
        for(int i=0;i<n;i++) cout<<topo[i]<<" \n"[i==n-1];
        swap(topo[sw], topo[sw+1]);
        for(int i=0;i<n;i++) cout<<topo[i]<<" \n"[i==n-1];
    }
}


RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva0/0128ms26800 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms348 KiB
7Elfogadva3/31ms316 KiB
8Elfogadva1/11ms364 KiB
9Elfogadva3/31ms316 KiB
10Elfogadva3/32ms564 KiB
11Elfogadva3/32ms492 KiB
12Elfogadva1/12ms316 KiB
13Elfogadva2/22ms564 KiB
14Elfogadva3/32ms568 KiB
15Elfogadva1/1104ms18684 KiB
16Elfogadva3/3143ms34176 KiB
17Elfogadva5/550ms20240 KiB
18Elfogadva1/1200ms42848 KiB
19Elfogadva2/2105ms19632 KiB
20Elfogadva3/3172ms45464 KiB
21Elfogadva4/4209ms49736 KiB
22Elfogadva4/4167ms47232 KiB