Advertisement
tien_noob

Lexicographically minimal routes

Feb 23rd, 2021 (edited)
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.03 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <numeric>
  5. #include <cmath>
  6. #include <climits>
  7. #include <iomanip>
  8. #include <queue>
  9. using namespace std;
  10. vector<vector<int>> Adj;
  11. int n, m, x, y,s , f, Trace[100001];
  12. vector <int> ans;
  13. queue<int> q;
  14. void read()
  15. {
  16.    cin >> n >> m >> s >> f;
  17.    Adj.resize(n + 1);
  18.    for (int i = 1; i <= m; ++ i)
  19.    {
  20.        cin >> x >> y;
  21.        Adj[x].push_back(y);
  22.    }
  23.    Trace[s] = -1;
  24.    for (int i = 1; i <= n; ++ i)
  25.    {
  26.        sort(Adj[i].begin(), Adj[i].end());
  27.    }
  28. }
  29. void DFS (int u)
  30. {
  31.    for (int v : Adj[u])
  32.    {
  33.        if (Trace[v] == 0)
  34.        {
  35.            Trace[v] = u;
  36.            DFS(v);
  37.        }
  38.    }
  39. }
  40. void solve()
  41. {
  42.     DFS(s);
  43.     while (f != s)
  44.     {
  45.         ans.push_back(f);
  46.         f = Trace[f];
  47.     }
  48.     ans.push_back(s);
  49.     reverse(ans.begin(), ans.end());
  50.     for (int i : ans)
  51.     {
  52.         cout << i << ' ';
  53.     }
  54. }
  55. int main()
  56. {
  57.     ios_base::sync_with_stdio(false);
  58.     cin.tie(nullptr);
  59.     read();
  60.     solve();
  61. }
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement