243622026-02-10 11:23:14szabel26Táblás játékcpp17Hibás válasz 0/50194ms5428 KiB
#include <iostream>
#include <vector>
#include <deque>
using namespace std;

struct adat
{
    vector<int> be;
    vector<int> ki;
    int be_db;
    int ki_db;
    int szint;
    int lat = 0;
};

deque<int> kov;
vector<adat> x;
vector<int> szint_st, sol1, sol2;

int n, m, a, b, szint_max, db;

void szelessegi(int akt)
{
    szint_max = max(szint_max, x[akt].szint);
    for (auto &e : x[akt].ki)
    {
        if (x[e].szint == 0 || x[e].szint < x[akt].szint + 1)
        {
            x[e].szint = x[akt].szint + 1;
            kov.push_back(e);
        }
    }
}

void keres(int i)
{
    for (int j = 1; j <= n; ++j)
    {
        if (x[j].szint == i && x[j].lat == 0 && sol1.size() < i)
        {
            sol1.push_back(j);
            x[j].lat = 1;
        }
        if (x[j].szint == i && x[j].lat == 0 && sol2.size() < i)
        {
            sol2.push_back(j);
            x[j].lat = 1;
        }
    }

    if (sol1.size() < i || sol2.size() < i)
        for (int j = 1; j <= n; ++j)
        {
            if (x[j].szint == i)
            {
                if (sol1.size() < i)
                    sol1.push_back(j);
                if (sol2.size() < i)
                    sol2.push_back(j);
                x[j].lat = 1;
            }
        }
}

int main()
{
    cin >> n >> m;
    x.resize(n + 1);
    for (int i = 1; i <= m; ++i)
    {
        cin >> a >> b;

        x[a].ki.push_back(b);
        x[a].ki_db = x[a].ki.size();

        x[b].be.push_back(a);
        x[b].be_db = x[b].be.size();
    }

    for (int i = 1; i <= n; ++i)
    {
        if (x[i].be_db == 0)
        {
            x[i].szint = 1;
            kov.push_back(i);
        }
    }

    while (!kov.empty())
    {
        szelessegi(kov[0]);
        kov.pop_front();
    }

    szint_st.resize(szint_max + 1);
    for (int i = 1; i <= n; ++i)
    {
        ++szint_st[x[i].szint];
    }

    for (int i = 1; i <= szint_max; ++i) // feltetelezve, hogy mindig az utolso szinten levo csp egy celpont
    {
        keres(i);
        if (szint_st[i] >= 2)
        {
            db += 2;
        }
        else
            db += szint_st[i];
    }

    cout << db << endl;

    for (auto &e : sol1)
        cout << e << " ";
    cout << 0 << endl;
    
    for (auto &e : sol2)
        cout << e << " ";
    cout << 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Hibás válasz194ms5428 KiB
subtask20/5
3Elfogadva2ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms508 KiB
6Hibás válasz2ms316 KiB
7Hibás válasz1ms316 KiB
subtask30/5
8Hibás válasz1ms316 KiB
9Hibás válasz1ms316 KiB
10Hibás válasz1ms500 KiB
11Hibás válasz1ms316 KiB
12Hibás válasz1ms316 KiB
subtask40/5
13Hibás válasz1ms316 KiB
14Hibás válasz1ms316 KiB
15Hibás válasz2ms564 KiB
16Hibás válasz2ms564 KiB
17Hibás válasz10ms1540 KiB
subtask50/10
18Elfogadva1ms316 KiB
19Hibás válasz2ms316 KiB
20Hibás válasz1ms316 KiB
21Hibás válasz1ms500 KiB
22Hibás válasz1ms316 KiB
23Hibás válasz1ms404 KiB
24Hibás válasz1ms316 KiB
25Hibás válasz1ms316 KiB
26Hibás válasz2ms316 KiB
27Hibás válasz32ms4080 KiB
subtask60/10
28Elfogadva1ms508 KiB
29Hibás válasz1ms316 KiB
30Elfogadva1ms316 KiB
31Hibás válasz1ms512 KiB
32Hibás válasz1ms316 KiB
33Hibás válasz1ms508 KiB
34Hibás válasz1ms316 KiB
35Hibás válasz1ms316 KiB
36Hibás válasz2ms316 KiB
37Hibás válasz34ms3864 KiB
subtask70/15
38Hibás válasz3ms564 KiB
39Hibás válasz8ms1076 KiB
40Hibás válasz138ms4840 KiB
41Hibás válasz150ms4400 KiB
42Hibás válasz68ms2832 KiB
43Hibás válasz39ms2376 KiB
44Hibás válasz50ms1824 KiB
45Hibás válasz6ms820 KiB
46Hibás válasz37ms2100 KiB
47Hibás válasz119ms3636 KiB
48Hibás válasz16ms1160 KiB
49Elfogadva2ms316 KiB
50Hibás válasz29ms1792 KiB
51Hibás válasz63ms4420 KiB
52Hibás válasz168ms4660 KiB