178892025-09-22 17:41:06algoproTestnevelés óracpp17Hibás válasz 42/50150ms16168 KiB
// UUID: b322a507-791a-4fac-9c53-108b710c39d5
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, K;
    cin >> N >> K;

    vector<vector<int>> g(N + 1);
    vector<int> indeg(N + 1, 0);

    for (int i = 0; i < K; i++) {
        int a, b;
        cin >> a >> b;
        g[a].push_back(b);
        indeg[b]++;
    }

    // topologikus rendezés (Kahn algoritmus)
    queue<int> q;
    for (int i = 1; i <= N; i++) {
        if (indeg[i] == 0) q.push(i);
    }

    vector<int> order;
    bool multiple = false;

    while (!q.empty()) {
        if (q.size() > 1) multiple = true;
        int u = q.front();
        q.pop();
        order.push_back(u);
        for (int v : g[u]) {
            indeg[v]--;
            if (indeg[v] == 0) q.push(v);
        }
    }

    if ((int)order.size() != N) {
        cout << 0 << "\n";
        return 0;
    }

    if (!multiple) {
        cout << 1 << "\n";
        for (int i = 0; i < N; i++) {
            cout << order[i] << (i + 1 == N ? '\n' : ' ');
        }
    } else {
        cout << 2 << "\n";
       
        for (int i = 0; i < N; i++) {
            cout << order[i] << (i + 1 == N ? '\n' : ' ');
        }
                vector<int> indeg2(N + 1, 0);
        for (int i = 1; i <= N; i++)
            for (int v : g[i]) indeg2[v]++;
        priority_queue<int, vector<int>, greater<int>> pq; 
        for (int i = 1; i <= N; i++)
            if (indeg2[i] == 0) pq.push(i);

        vector<int> order2;
        bool skipped = false;
        while (!pq.empty()) {
            if (pq.size() > 1 && !skipped) {
                
                int first = pq.top(); pq.pop();
                int second = pq.top(); pq.pop();
                order2.push_back(second);
                for (int v : g[second]) {
                    indeg2[v]--;
                    if (indeg2[v] == 0) pq.push(v);
                }
                pq.push(first);
                skipped = true;
            } else {
                int u = pq.top(); pq.pop();
                order2.push_back(u);
                for (int v : g[u]) {
                    indeg2[v]--;
                    if (indeg2[v] == 0) pq.push(v);
                }
            }
        }
        for (int i = 0; i < N; i++) {
            cout << order2[i] << (i + 1 == N ? '\n' : ' ');
        }
    }

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base42/50
1Elfogadva0/01ms500 KiB
2Elfogadva0/01ms508 KiB
3Elfogadva0/0114ms8364 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva3/31ms384 KiB
8Elfogadva1/11ms316 KiB
9Elfogadva3/31ms316 KiB
10Elfogadva3/32ms492 KiB
11Elfogadva3/32ms356 KiB
12Elfogadva1/12ms316 KiB
13Elfogadva2/22ms316 KiB
14Elfogadva3/31ms316 KiB
15Elfogadva1/171ms4468 KiB
16Elfogadva3/3112ms11412 KiB
17Elfogadva5/565ms12960 KiB
18Elfogadva1/1150ms16168 KiB
19Elfogadva2/271ms4528 KiB
20Elfogadva3/3128ms12796 KiB
21Hibás válasz0/4145ms12840 KiB
22Hibás válasz0/4133ms12864 KiB