1599 2022. 11. 28 20:34:53 kicsiboglar Testnevelés óra cpp11 Hibás válasz 31/50 317ms 63152 KiB
#include <iostream>
#include <vector>
#include <deque>

#define ll long long 

using namespace std;

struct element
{
    bool seen,rseen;
    ll in, out;
    vector < ll> sz, rsz;

};

vector <element> x;
ll n, i, j, m, a, b;
deque <ll> res, rres;
bool ok2 = false;
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 rtopo(ll curr)
{
    x[curr].rseen = true;
    for (auto& e : x[curr].rsz)
    {
        if (!x[e].rseen)
        {
           
            rtopo(e);
        }
    }
    rres.push_back(curr);
}
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].rsz.push_back(a);
        x[a].out++;
        x[b].in++;
    }

    vector <ll> start, rstart;
    for (i = 1; i <= n; ++i)
    {
        if (x[i].in == 0) start.push_back(i);
        if (x[i].out == 0) rstart.push_back(i);
    }

    if (start.size() == 0)
    {
        cout << "0";
        return 0;
    }
    if (start.size() == 1)
    {
        topo(start[0]);
        if (res.size() != n)
        {
            cout << "0";
            return 0;
        }
        rtopo(res.back());

        if (res.size() == rres.size())
        {
            for (i = 0; i < n; ++i)
            {
                if (res[i] != rres[i]) break;
            }
            if (i == n)
            {
                cout << "1\n";
                for (auto& e : res) cout << e << " ";
                return 0;
            }
        }
        for (i = 0; i < min(res.size(), rres.size()); ++i)
        {
            if (res[i] != rres[i]) break;
        }
        cout << "2\n";
        for (auto& e : res) cout << e << " ";
        cout << "\n";
        for (auto& e : rres) cout << e << " ";
        while (i<n && !x[res[i]].rseen)
        {
            cout << res[i] << " ";
            ++i;
        }
        return 0;
    }
    ok2 = true;
    deque <ll> R;
    //for (auto& e : start) R.push_back(e);
    for (auto& e : start)
    {
        while (!res.empty())
        {
            res.pop_front();
            if (!res.empty()) R.push_back(res[0]);
        }
        topo(e);
    }
    res.pop_front();
    if (R.size() + res.size() + start.size() != n)
    {
        cout << "0";
        return 0;
    }

    cout << "2\n";
    for (auto& e : start) cout << e << " ";
    for (auto& e : R) cout << e << " ";
    for (auto& e : res) cout << e << " ";
    cout << "\n";
    cout << start.back() << " ";
    start.pop_back();
    for (auto& e : start) cout << e << " ";
    for (auto& e : R) cout << e << " ";
    for (auto& e : res) cout << e << " ";
    return 0;
}
    

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

*/
Részfeladat Összpont Teszt Verdikt Idő Memória
base 31/50
1 Elfogadva 0/0 3ms 1816 KiB
2 Elfogadva 0/0 2ms 2052 KiB
3 Hibás válasz 0/0 226ms 31152 KiB
4 Hibás válasz 0/2 2ms 2308 KiB
5 Elfogadva 3/3 2ms 2388 KiB
6 Elfogadva 3/3 2ms 2664 KiB
7 Elfogadva 3/3 2ms 2600 KiB
8 Hibás válasz 0/1 2ms 2736 KiB
9 Hibás válasz 0/3 2ms 2928 KiB
10 Hibás válasz 0/3 4ms 3408 KiB
11 Hibás válasz 0/3 4ms 3784 KiB
12 Hibás válasz 0/1 4ms 3716 KiB
13 Elfogadva 2/2 4ms 3732 KiB
14 Hibás válasz 0/3 3ms 3680 KiB
15 Elfogadva 1/1 196ms 24616 KiB
16 Hibás válasz 0/3 193ms 36612 KiB
17 Elfogadva 5/5 75ms 38672 KiB
18 Elfogadva 1/1 268ms 52588 KiB
19 Elfogadva 2/2 197ms 26140 KiB
20 Elfogadva 3/3 317ms 63152 KiB
21 Elfogadva 4/4 317ms 63096 KiB
22 Elfogadva 4/4 296ms 57248 KiB