82792024-01-14 09:07:56MagyarKendeSZLGKerékpártúra (50 pont)cpp17Elfogadva 50/5064ms10128 KiB
#include <bits/stdc++.h>
#define speed cin.tie(0); ios::sync_with_stdio(0)
using namespace std;

int N, M, K;

vector<bool> bfs(const vector<vector<int>>& g) {
    vector<bool> vis(N + 1);
    queue<int> q;
    q.push(K);
    vis[K] = 1;
    while (!q.empty()) {
        int node = q.front(); q.pop();
        for (int neigh : g[node]) {
            if (!vis[neigh]) {
                vis[neigh] = 1; 
                q.push(neigh);
            }
        }
    }
    return vis;
}

int main() {
    speed;

    cin >> N >> M >> K;

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

    while (M--) {
        int U, V;
        cin >> U >> V;
        g[U].push_back(V);
        g2[V].push_back(U);
    }

    vector<bool> vis = bfs(g), vis2 = bfs(g2), both(N + 1);

    for (int i = 1; i <= N; i++) {
        both[i] = vis[i] && vis2[i];
    }

    vector<int> base;
    for (int i = 1; i <= N; i++) {
        if (both[i]) base.push_back(i);
    }

    unordered_set<int> result;
    for (int x : base) {
        result.insert(x);
        for (int neigh : g[x]) {
            result.insert(neigh);
        }
    }

    result.erase(K);

    if (result.empty()) {
        cout << 0;
        exit(0);
    }

    cout << result.size() << '\n';
    for (int x : result) cout << x << ' ';
    cout << '\n';
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/03ms1832 KiB
2Elfogadva0/012ms4204 KiB
3Elfogadva2/23ms2424 KiB
4Elfogadva2/23ms2588 KiB
5Elfogadva2/23ms2676 KiB
6Elfogadva2/23ms2776 KiB
7Elfogadva2/23ms2916 KiB
8Elfogadva2/23ms2828 KiB
9Elfogadva2/24ms3000 KiB
10Elfogadva2/24ms3092 KiB
11Elfogadva2/24ms3152 KiB
12Elfogadva2/28ms3600 KiB
13Elfogadva2/27ms3584 KiB
14Elfogadva2/212ms4364 KiB
15Elfogadva3/319ms5968 KiB
16Elfogadva4/421ms6492 KiB
17Elfogadva4/428ms7144 KiB
18Elfogadva3/326ms7016 KiB
19Elfogadva3/324ms6772 KiB
20Elfogadva3/354ms8864 KiB
21Elfogadva3/361ms9632 KiB
22Elfogadva3/364ms10128 KiB