155222025-02-20 10:40:26999Testnevelés óracpp17Wrong answer 13/50234ms21044 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;

vector<int> vis;

bool dfs(vector<vector<int>>& v, int node){
    vis[node]=1;
    bool jo=true;
    for(int i : v[node]){
        if(vis[i]==1)return false;
        else if(vis[i]==0){
            jo&=dfs(v,i);
        }
    }
    vis[node]=2;
    return jo;
}

int main() {
    int n,k;cin>>n>>k;
    vector<vector<int>> v(n);
    vis.resize(n);
    vector<int> befok(n),kifok(n);
    for(int i = 0;i<k;i++){
        int a,b;cin>>a>>b;
        v[--a].push_back(--b);
        kifok[a]++;
        befok[b]++;
    }
    bool jo=true;
    for(int i = 0;i<n;i++){
        if(vis[i]==0){
            if(!dfs(v,i)){
                jo=false;
                break;
            }
        }
    }
    if(jo==false){
        cout<<0<<endl;
        return 0;
    }
    int mon=0;
    deque<int> top1,bf;
    vector<int> volt(n);
    for(int i = 0;i<n;i++){
        if(befok[i]==0&&mon!=0&&!volt[i])bf.push_back(i);
        if(befok[i]==0&&mon<1){
            mon++;
            queue<int> q;
            q.push(i);
            while(!q.empty()){
                int node=q.front();
                q.pop();
                volt[node]=1;
                if(mon==1){
                    top1.push_back(node);
                }
                for(int u : v[node]){
                    befok[u]--;
                    if(befok[u]==0){
                        q.push(u);
                    }
                }
            }
        }
    }
    if(top1.size()==n){
        cout<<1<<endl;
        for(int i : top1)cout<<i+1<<' ';
    }
    else{
        vector<int> top2;
        queue<int> q;
        for(int i : bf)q.push(i);
        while(!q.empty()){
            int node=q.front();
            q.pop();
            top2.push_back(node);
            for(int u : v[node]){
                befok[u]--;
                if(befok[u]==0){
                    q.push(u);
                }
            }
        }
        cout<<2<<endl;
        for(int i : top1)cout<<i+1<<' ';
        for(int i : top2)cout<<i+1<<' ';
        cout<<endl;
        for(int i : top2)cout<<i+1<<' ';
        for(int i : top1)cout<<i+1<<' ';

    }
}
SubtaskSumTestVerdictTimeMemory
base13/50
1Accepted0/01ms316 KiB
2Accepted0/01ms316 KiB
3Wrong answer0/0199ms8372 KiB
4Wrong answer0/21ms512 KiB
5Partially correct1/31ms316 KiB
6Wrong answer0/31ms316 KiB
7Wrong answer0/31ms316 KiB
8Accepted1/11ms316 KiB
9Wrong answer0/31ms316 KiB
10Wrong answer0/33ms440 KiB
11Wrong answer0/33ms316 KiB
12Accepted1/13ms316 KiB
13Accepted2/23ms316 KiB
14Wrong answer0/32ms316 KiB
15Accepted1/1175ms4780 KiB
16Wrong answer0/3159ms11884 KiB
17Accepted5/548ms13388 KiB
18Wrong answer0/1228ms16332 KiB
19Accepted2/2170ms5300 KiB
20Wrong answer0/3197ms16948 KiB
21Wrong answer0/4234ms21044 KiB
22Wrong answer0/4184ms18656 KiB