152732025-02-17 19:46:18mateKerékpártúra (50 pont)cpp17Elfogadva 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 << ' ';
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/010ms1588 KiB
3Elfogadva2/21ms316 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva2/21ms316 KiB
6Elfogadva2/21ms316 KiB
7Elfogadva2/21ms316 KiB
8Elfogadva2/22ms316 KiB
9Elfogadva2/22ms496 KiB
10Elfogadva2/22ms316 KiB
11Elfogadva2/23ms508 KiB
12Elfogadva2/26ms776 KiB
13Elfogadva2/26ms592 KiB
14Elfogadva2/29ms912 KiB
15Elfogadva3/324ms2516 KiB
16Elfogadva4/430ms2752 KiB
17Elfogadva4/445ms3252 KiB
18Elfogadva3/348ms3124 KiB
19Elfogadva3/350ms3136 KiB
20Elfogadva3/357ms3732 KiB
21Elfogadva3/382ms4148 KiB
22Elfogadva3/396ms4364 KiB