16012022-11-28 20:35:33kicsiboglarTestnevelés óracpp11Hibás válasz 6/50460ms127172 KiB
// tornasor.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <vector>
#include <deque>
#define ll long long 

using namespace std;

ll n, m, i, j, a, b;
struct element
{
    bool seen = false;
    ll in = 0;
    vector <ll> sz;
};
vector <element> x;
ll db=0;
deque <ll> res,res1;
bool ok;
void topo(ll curr)
{
    x[curr].seen = true;
   
    for (auto e : x[curr].sz)
    {
        if (!x[e].seen) topo(e);
      
    }
    res.push_front(curr);
}
void toposzam(ll curr, ll al)
{
    x[curr].seen = true;
    
    for (auto e : x[curr].sz)
    {
        if (!x[e].seen) toposzam(e,al+1);
        if (ok) return;
        x[e].seen = false;
    }
    res.push_front(curr);
    if (al == n)
    {
        db++;
        if (db == 1)
        {
            res1 = res;
        }
        else
        {
            ok = true;
            return;
        }
    }
}
int main()
{
    cin >> n >> m;
    x.resize(n + 1);
    for (i = 1; i <= m; ++i)
    {
        cin >> a >> b;
        x[a].sz.push_back(b);
        x[b].in++;
    }
    ll db2=0;
    //cout << "1\n";
    for (i = 1; i <= n; ++i)
    {
        if (x[i].in == 0)
        {
            db++;
            if (x[i].sz.size() == 0) db2++;
        }

    }
    if (db==0)
    {
        cout << "0\n\n";
        return 0;
    }
    if (db > 1)
    {
        for (i = 1; i <= n; ++i)
        {
            if (x[i].in == 0)
            {
                if (!res.empty())
                {
                    for (auto& e : res) res1.push_back(e);
                    res.clear();
                }
                topo(i);
            }
        }

        if (res1.size() + res.size() != n)
        {
            cout << "0";
            return 0;
        }
        cout << "2\n";
        for (auto& e : res) cout << e << " ";
        for (auto& e : res1) cout << e << " ";
        cout << "\n";
        for (auto& e : res1) cout << e << " ";
        for (auto& e : res) cout << e << " ";
        return 0;
    }
    db = 0;
    
    for (i = 1; i <= n; ++i)
    {
        if (x[i].in == 0)
        {
            toposzam(i,1);
            break;
        }
    }
    if (ok)
    {
        cout << "2\n";
        for (auto e : res1) cout << e << " ";
        cout << "\n";
    }

}

/*
5 4
3 2
2 1
1 5
1 4


5 9
3 1
5 3
3 4
4 2
3 2
1 4
1 2
1 5
5 4

5 4
3 2
2 1
1 5
5 3

*/
RészfeladatÖsszpontTesztVerdiktIdőMemória
base6/50
1Hibás válasz0/03ms1872 KiB
2Elfogadva0/02ms2268 KiB
3Hibás válasz0/0192ms17980 KiB
4Hibás válasz0/22ms2484 KiB
5Részben helyes1/32ms2844 KiB
6Hibás válasz0/32ms2844 KiB
7Hibás válasz0/32ms3076 KiB
8Hibás válasz0/12ms3108 KiB
9Hibás válasz0/32ms3304 KiB
10Futási hiba0/3131ms124020 KiB
11Futási hiba0/3126ms124372 KiB
12Hibás válasz0/14ms4016 KiB
13Futási hiba0/2170ms124792 KiB
14Hibás válasz0/33ms4324 KiB
15Futási hiba0/1453ms127172 KiB
16Hibás válasz0/3158ms24076 KiB
17Elfogadva5/563ms23064 KiB
18Hibás válasz0/1244ms31604 KiB
19Futási hiba0/2460ms126532 KiB
20Hibás válasz0/3155ms51304 KiB
21Hibás válasz0/4174ms51412 KiB
22Hibás válasz0/4156ms51404 KiB