1319 2022. 05. 13 16:31:43 nkdorka1212 Testnevelés óra cpp11 Elfogadva 50/50 164ms 38056 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 Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 4ms 1796 KiB
2 Elfogadva 0/0 1ms 1820 KiB
3 Elfogadva 0/0 107ms 15736 KiB
4 Elfogadva 2/2 1ms 4164 KiB
5 Elfogadva 3/3 1ms 4172 KiB
6 Elfogadva 3/3 1ms 4180 KiB
7 Elfogadva 3/3 1ms 4180 KiB
8 Elfogadva 1/1 1ms 4180 KiB
9 Elfogadva 3/3 1ms 4188 KiB
10 Elfogadva 3/3 2ms 4348 KiB
11 Elfogadva 3/3 2ms 4292 KiB
12 Elfogadva 1/1 2ms 4312 KiB
13 Elfogadva 2/2 3ms 4344 KiB
14 Elfogadva 3/3 2ms 4364 KiB
15 Elfogadva 1/1 75ms 14192 KiB
16 Elfogadva 3/3 119ms 23804 KiB
17 Elfogadva 5/5 52ms 22304 KiB
18 Elfogadva 1/1 146ms 31860 KiB
19 Elfogadva 2/2 86ms 20872 KiB
20 Elfogadva 3/3 158ms 34360 KiB
21 Elfogadva 4/4 164ms 36220 KiB
22 Elfogadva 4/4 128ms 38056 KiB