1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| #include<bits/stdc++.h> #include <ostream>
using namespace std; typedef long long ll; #define YES cout << "YES" << endl #define NO cout << "NO" << endl #define debug() cout.flush() const ll MOD = 1e9 + 7; const int INF = 0x3f3f3f3f; const int MAXN = 4e6 + 5e3;
inline void init() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); }
struct Edge{ int to, nxt; }e[MAXN];
int cnt, head[MAXN], vis[MAXN], deep[MAXN], n, m, q;
inline void add(int from, int to) { e[cnt] = Edge{to, head[from]}; head[from] = cnt++; }
inline void dfs (int root) { cout << root << endl; for (int i =head[root]; i != -1; i = e[i].nxt) { if (!vis[e[i].to] && deep[e[i].to] == deep[root] + 1) { vis[e[i].to] = 1; dfs(e[i].to); } } }
inline void solve() { cin >> n >> m; cnt = 1; for (int i = 1; i <= n; i++) { head[i] = -1; deep[i] = 0; } for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; add(u, v); add(v, u); } cin >> q; function<void (int)> bfs = [&] (int root) { for (int i = 1; i <= n; i++) vis[i] = 0; vis[q] = 1; queue<pair<int, int> >que; que.push(make_pair(q, 1)); deep[q] = 1; while (!que.empty()) { pair<int, int> front = que.front(); que.pop(); for (int i =head[front.first]; i != -1; i = e[i].nxt) { if (!vis[e[i].to]) { deep[e[i].to] = 1 + front.second; que.push(make_pair(e[i].to, front.second + 1)); vis[e[i].to] = 1; } } } }; bfs(q); for (int i = 1; i <= n; i++) vis[i] = 0; vis[q] = 1; dfs(q); }
signed main() { init(); int Case = 1;
while (Case--) { solve(); } return 0; }
|