didedoshka

bridges

Dec 11th, 2020
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.59 KB | None | 0 0
  1. vector<vector<pair<int, int>>> g;
  2. vector<int> used;
  3. vector<int> up;
  4. vector<int> tin;
  5. vector<int> ans;
  6. int timer = 0;
  7.  
  8. void dfs(int v, int parent, int parent_edge) {
  9.     tin[v] = up[v] = timer++;
  10.     used[v] = 1;
  11.     for (auto[u, edge] : g[v]) {
  12.         if (u == parent && edge == parent_edge) {
  13.             continue;
  14.         }
  15.         if (used[u]) {
  16.             up[v] = min(up[v], tin[u]);
  17.         } else {
  18.             dfs(u, v, edge);
  19.             up[v] = min(up[v], up[u]);
  20.             if (up[u] > tin[v]) {
  21.                 ans.push_back(edge);
  22.             }
  23.         }
  24.     }
  25. }
Advertisement
Add Comment
Please, Sign In to add comment