179672025-09-24 17:55:52algoproTestnevelés óracpp17Accepted 50/50234ms20396 KiB
// UUID: c11e3124-dd2e-4cfb-aad7-42e0df5b4353
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> graf;
vector<int> vis;
bool kor=false;
vector<int> ans;

void dfs(int x){
    vis[x]=1;
    for (int i:graf[x]){
        if (vis[i]==0) dfs(i);
        else if (vis[i]==1) kor=true;
    }
    ans.push_back(x);
    vis[x]=2;
}

int main() {
	int n,k; cin>>n>>k;
    int a,b; 
    graf.resize(n);
    vis.resize(n,0);
    for (int i=0; i<k; i++){
        cin>>a>>b;
        a--; b--;
        graf[a].push_back(b);
    }
    for (int i=0; i<n; i++){
        if (vis[i]==0) dfs(i);
    }
    if (kor) cout<<0<<endl;
    else{ 
        int ind=-1;
        reverse(ans.begin(),ans.end());
        for (int i=0; i<n-1; i++){
            bool g=false;
            for (int j:graf[ans[i]]){
                if (j==ans[i+1]){
                    g=true;
                }
            }
            if (!g) ind=i;
        }
        if (ind==-1){
            cout<<1<<endl;
            for (int i:ans) cout<<i+1<<" ";
        }
        else {
            cout<<2<<endl;
            for (int i=0; i<n; i++){
                cout<<ans[i]+1<<" ";
            } 
            cout<<endl;
            swap(ans[ind],ans[ind+1]);
            for (int i=0; i<n; i++){
                cout<<ans[i]+1<<" ";
            }
        }
    }
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/01ms316 KiB
2Accepted0/01ms316 KiB
3Accepted0/0196ms7080 KiB
4Accepted2/21ms316 KiB
5Accepted3/31ms316 KiB
6Accepted3/31ms316 KiB
7Accepted3/31ms316 KiB
8Accepted1/11ms316 KiB
9Accepted3/31ms316 KiB
10Accepted3/33ms508 KiB
11Accepted3/33ms316 KiB
12Accepted1/12ms316 KiB
13Accepted2/23ms316 KiB
14Accepted3/32ms316 KiB
15Accepted1/1156ms4484 KiB
16Accepted3/3164ms10104 KiB
17Accepted5/557ms9280 KiB
18Accepted1/1234ms13224 KiB
19Accepted2/2157ms4764 KiB
20Accepted3/3194ms16224 KiB
21Accepted4/4221ms20396 KiB
22Accepted4/4187ms17836 KiB