DuongNhi99

CJPAYSBALLAS (lqdoj) - BFS

Mar 11th, 2021 (edited)
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.31 KB | None | 0 0
  1. // https://lqdoj.edu.vn/problem/cjpaysballas
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. const int N = 1e5 + 5;
  6.  
  7. int n, m, s, t;
  8. vector<int> g[N];
  9.  
  10. bool visited[N];
  11. int parent[N];
  12. vector<int> path;
  13.  
  14. queue<int> q;
  15.  
  16. void BFS() {
  17.     q.push(s);
  18.     visited[s] = true;
  19.     parent[s] = -1;
  20.  
  21.     while (!q.empty()) {
  22.         int u = q.front();
  23.         q.pop();
  24.         if (u == t) break;
  25.  
  26.         for (int i = 0; i < (int) g[u].size(); i++) {
  27.             int v = g[u][i];
  28.  
  29.             if (!visited[v]) {
  30.                 q.push(v);
  31.                 visited[v] = true;
  32.                 parent[v] = u;
  33.             }
  34.         }
  35.     }
  36. }
  37.  
  38. int main() {
  39. #ifdef LOCAL
  40.     freopen("in.txt", "r", stdin);
  41. #else
  42.     freopen("CJPAYSBALLAS.inp", "r", stdin);
  43.     freopen("CJPAYSBALLAS.out", "w", stdout);
  44. #endif
  45.     ios_base::sync_with_stdio(false);
  46.     cin.tie(nullptr);
  47.  
  48.     cin >> n >> m >> s >> t;
  49.  
  50.     for (int i = 1; i <= m; i++) {
  51.         int u, v; cin >> u >> v;
  52.         g[u].push_back(v);
  53.     }
  54.  
  55.     for (int i = 1; i <= n; i++)
  56.         sort(g[i].begin(), g[i].end());
  57.  
  58.     BFS();
  59.  
  60.     int u = t;
  61.     while (u != -1) {
  62.         path.push_back(u);
  63.         u = parent[u];
  64.     }
  65.  
  66.     for (int i = (int) path.size() - 1; i >= 0; i--)
  67.         cout << path[i] << ' ';
  68.  
  69.     return 0;
  70. }
  71.  
Advertisement
Add Comment
Please, Sign In to add comment