243612026-02-10 11:11:40szabel26Táblás játékcpp17Hibás válasz 0/50197ms5428 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 << endl;
    for (auto &e : sol2)
        cout << e << " ";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Hibás válasz1ms316 KiB
2Hibás válasz197ms5428 KiB
subtask20/5
3Hibás válasz1ms508 KiB
4Hibás válasz1ms508 KiB
5Hibás válasz1ms316 KiB
6Hibás válasz1ms316 KiB
7Hibás válasz1ms316 KiB
subtask30/5
8Hibás válasz1ms508 KiB
9Hibás válasz1ms316 KiB
10Hibás válasz1ms316 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álasz12ms1612 KiB
subtask50/10
18Hibás válasz1ms316 KiB
19Hibás válasz1ms316 KiB
20Hibás válasz1ms316 KiB
21Hibás válasz1ms316 KiB
22Hibás válasz1ms316 KiB
23Hibás válasz1ms316 KiB
24Hibás válasz1ms316 KiB
25Hibás válasz1ms316 KiB
26Hibás válasz2ms316 KiB
27Hibás válasz34ms3932 KiB
subtask60/10
28Hibás válasz1ms508 KiB
29Hibás válasz2ms316 KiB
30Hibás válasz1ms316 KiB
31Hibás válasz1ms316 KiB
32Hibás válasz1ms316 KiB
33Hibás válasz1ms396 KiB
34Hibás válasz1ms552 KiB
35Hibás válasz1ms500 KiB
36Hibás válasz2ms316 KiB
37Hibás válasz32ms4064 KiB
subtask70/15
38Hibás válasz3ms564 KiB
39Hibás válasz9ms1084 KiB
40Hibás válasz140ms4828 KiB
41Hibás válasz144ms4404 KiB
42Hibás válasz72ms2828 KiB
43Hibás válasz39ms2396 KiB
44Hibás válasz45ms2164 KiB
45Hibás válasz6ms820 KiB
46Hibás válasz37ms2356 KiB
47Hibás válasz118ms3636 KiB
48Hibás válasz16ms1076 KiB
49Hibás válasz2ms316 KiB
50Hibás válasz28ms1596 KiB
51Hibás válasz64ms4408 KiB
52Hibás válasz170ms4592 KiB