152732025-02-17 19:46:18mateKerékpártúra (50 pont)cpp17Accepted 50/5096ms4364 KiB
#include <bits/stdc++.h>
using namespace std;

vector <vector <int>> g;
vector <vector <int>> g_trans;
vector <bool> jart;
set <int> ans;
set <int> egy;
vector <int> ketto;
vector <int> bejart;
vector <int> top;
int n,k;

void dfs(int p){
    jart[p] = 1;
    for(int x : g[p]){
        if(!jart[x]){
            dfs(x);
        }
    }
    top.push_back(p);
}

void dfs2(int p){
    bejart[p] = 1;
    for(int x : g_trans[p]){
        if(!bejart[x]){
            dfs2(x);
        }
    }
    ketto.push_back(p);
    
}


int main() {
    ios::sync_with_stdio(0); cin.tie(0);
	int m; cin >> n >> m >> k;
    g.resize(n+1);
    g_trans.resize(n+1);
    jart.resize(n+1,0);
    bejart.resize(n+1,0);
    int a,b;
    for(int i = 0; i < m; i++){
        cin >> a >> b;
        g[a].push_back(b);
        g_trans[b].push_back(a);
    }
    dfs(k);
    reverse(top.begin(),top.end());
    dfs2(k);

    for(int x : top){
        for(int y : ketto){
            if(x == y) egy.insert(x);
        }
    }
    for(int x : egy){
        for(int y : g[x]){
            ans.insert(y);
        }
    }

    if(ans.count(k)){
        cout << ans.size()-1 << '\n';
    }else
    cout << ans.size() << '\n';
    for(int x : ans){
        if(x == k)  continue;
        cout << x << ' ';
    }
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/01ms316 KiB
2Accepted0/010ms1588 KiB
3Accepted2/21ms316 KiB
4Accepted2/21ms316 KiB
5Accepted2/21ms316 KiB
6Accepted2/21ms316 KiB
7Accepted2/21ms316 KiB
8Accepted2/22ms316 KiB
9Accepted2/22ms496 KiB
10Accepted2/22ms316 KiB
11Accepted2/23ms508 KiB
12Accepted2/26ms776 KiB
13Accepted2/26ms592 KiB
14Accepted2/29ms912 KiB
15Accepted3/324ms2516 KiB
16Accepted4/430ms2752 KiB
17Accepted4/445ms3252 KiB
18Accepted3/348ms3124 KiB
19Accepted3/350ms3136 KiB
20Accepted3/357ms3732 KiB
21Accepted3/382ms4148 KiB
22Accepted3/396ms4364 KiB