13302022-05-14 14:49:17nkdorka1212Útadócpp11Hibás válasz 0/5025ms10520 KiB
#include <bits/stdc++.h>

using namespace std;
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")

int n,k;
vector<int>befok;
vector<vector<int>>g;
vector<bool>vis;
vector<int>mo;
int db=0;
bool ketto=false;
int l,r;

int bfs()
{
    queue<int>q;
    for(int i=1;i<=n;i++)
    {
        if(befok[i]==0)
        {
            q.push(i);
            mo.push_back(i);
        }
    }
    if(q.size()==0)
    {
        return -1;
    }else
    {
        if(q.size()>=2)
        {
            ketto=true;
            l=0,r=1;
        }
        while(!q.empty())
        {
            int v=q.front();
            q.pop();
            //mo.push_back(v);
            int db1=0;
            for(int x:g[v])
            {
                befok[x]--;
                if(befok[x]==0 && !vis[x])
                {
                    q.push(x);
                    vis[x]=true;
                    db1++;
                    mo.push_back(x);
                    if(db1>1 && !ketto)
                    {
                        ketto=true;
                        l=mo.size()-2;
                        r=mo.size()-1;
                    }
                }
            }
            db++;
        }
        if(db<n)
        {
            return -1;
        }
        if(!ketto)
        {
            return 1;
        }
        return 2;
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin>>n>>k;
    befok.resize(n+1,0);
    g.resize(n+1);
    vis.resize(n+1,0);
    db=0;
    for(int i=1;i<=k;i++)
    {
        int u,v;
        cin>>u>>v;
        g[u].push_back(v);
        befok[v]++;
    }
    int m=bfs();
    if(m==-1)
    {
        cout<<0<<'\n';
    }else if(m==1)
    {
        cout<<1<<'\n';
        for(int x:mo)
        {
            cout<<x<<" ";
        }
    }else
    {
        cout<<2<<'\n';
        for(int x:mo)
        {
            cout<<x<<" ";
        }
        cout<<'\n';
        for(int i=0;i<=n-1;i++)
        {
            if(i!=l && i!=r)
            {
                cout<<mo[i]<<" ";
            }else if(i==l)
            {
                cout<<mo[r]<<" ";
            }else if(i==r)
            {
                cout<<mo[l]<<" ";
            }
        }
    }
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/50
1Hibás válasz0/02ms1820 KiB
2Hibás válasz0/010ms4704 KiB
3Hibás válasz0/21ms2240 KiB
4Hibás válasz0/21ms2240 KiB
5Hibás válasz0/21ms2240 KiB
6Hibás válasz0/21ms2252 KiB
7Hibás válasz0/21ms2252 KiB
8Hibás válasz0/83ms5688 KiB
9Hibás válasz0/21ms2316 KiB
10Hibás válasz0/21ms2332 KiB
11Hibás válasz0/21ms2356 KiB
12Hibás válasz0/21ms2376 KiB
13Hibás válasz0/22ms2396 KiB
14Hibás válasz0/214ms7872 KiB
15Hibás válasz0/213ms6976 KiB
16Hibás válasz0/220ms7940 KiB
17Hibás válasz0/212ms8840 KiB
18Hibás válasz0/210ms8884 KiB
19Hibás válasz0/214ms8764 KiB
20Hibás válasz0/28ms8172 KiB
21Hibás válasz0/218ms8924 KiB
22Hibás válasz0/225ms10380 KiB
23Hibás válasz0/213ms10520 KiB
24Hibás válasz0/217ms9608 KiB