246822026-02-13 14:42:21Pedri26Testnevelés óracpp17Elfogadva 50/5094ms9520 KiB
// Source: https://usaco.guide/general/io

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

int n, m, kovel[200001], mutat[200001], elsoel[200001], eldb, fokszam[200001], efokszam[200001], m2[200001], m1[200001], s1 ,s2, legala[200001];
bool leteziktobbmegoldas;
int alacsony=0;

void elhozzaadas(int a, int b)
{
    eldb++;
    kovel[eldb]=elsoel[a];
    elsoel[a]=eldb;
    mutat[eldb]=b;
    fokszam[b]++;
}

void szbejar()
{
    int vsor[200001], elso=1, utolso=0;
    for(int i=1;i<=alacsony;i++)
    {
        utolso++;
        vsor[utolso]=legala[i];
    }
    while(elso<=utolso)
    {
        s1++;
        m1[s1]=vsor[elso];
        if(utolso-elso>=1)leteziktobbmegoldas=true;
        for(int k=elsoel[vsor[elso]];k!=0;k=kovel[k])
        {
            fokszam[mutat[k]]--;
            //cout<<mutat[k]<<"-"<<fokszam[mutat[k]]<<endl;
            if(fokszam[mutat[k]]==0)
            {
                utolso++;
                vsor[utolso]=mutat[k];
            }
        }
        elso++;
    }
}

void mbejar()
{
    int vsor2[200001], utso=0;
    //utolso++;
    for(int i=1;i<=alacsony;i++)
    {
        utso++;
        vsor2[utso]=legala[i];
    }

    while(utso>0)
    {
        int aktualis=vsor2[utso];
        s2++;
        m2[s2]=vsor2[utso];
        utso--;
        //cout<<m2[s2]<<" ";
        for(int k=elsoel[aktualis];k!=0;k=kovel[k])
        {
            fokszam[mutat[k]]--;
            //cout<<mutat[k]<<"-"<<fokszam[mutat[k]]<<endl;
            if(fokszam[mutat[k]]==0)
            {
                utso++;
                vsor2[utso]=mutat[k];
                //cout<<mutat[k];
            }
        }
    }
}

int main() {
    
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int a, b;
        cin>>a>>b;
        elhozzaadas(a, b);
    }
    for(int i=1;i<=n;i++)
    {
        if(fokszam[i]==0)
        {
            alacsony++;
            legala[alacsony]=i;
            //cout<<legala[alacsony]<<endl;
        }
    }
    for(int i=1;i<=n;i++)
    {
        efokszam[i]=fokszam[i];
    }
    szbejar();
    //cout<<leteziktobbmegoldas<<endl;
    if(s1!=n)cout<<0;
    else
    {
        if(!leteziktobbmegoldas){
            cout<<"1"<<endl;
            for(int i=1;i<=s1;i++)
            {
                cout<<m1[i]<<" ";
            }
        }
        else {
            for(int i=1;i<=n;i++)
            {
                fokszam[i]=efokszam[i];
            }
            cout<<"2"<<endl;
            for(int i=1;i<=s1;i++)
            {
                cout<<m1[i]<<" ";
            }
            cout<<endl;
            mbejar();
            for(int i=1;i<=s2;i++)
            {
                cout<<m2[i]<<" ";
            }
        }
    }

    
    


    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva0/075ms5428 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva3/31ms508 KiB
8Elfogadva1/11ms316 KiB
9Elfogadva3/31ms316 KiB
10Elfogadva3/32ms316 KiB
11Elfogadva3/32ms316 KiB
12Elfogadva1/12ms316 KiB
13Elfogadva2/22ms472 KiB
14Elfogadva3/31ms464 KiB
15Elfogadva1/157ms3172 KiB
16Elfogadva3/361ms5880 KiB
17Elfogadva5/539ms7724 KiB
18Elfogadva1/194ms9520 KiB
19Elfogadva2/256ms3380 KiB
20Elfogadva3/383ms6808 KiB
21Elfogadva4/481ms6980 KiB
22Elfogadva4/482ms6960 KiB