4eyes4u

Tarjan bridge

Apr 30th, 2016
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.71 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N=1e5+10;
  5.  
  6. vector<int> g[N];
  7. int n, m;
  8. int low[N], in[N];
  9. int t;
  10.  
  11. void Tarjan (int v, int prev)
  12. {
  13.     in[v]=low[v]=++t;
  14.  
  15.     for (auto xt: g[v])
  16.     {
  17.         if (xt==prev) continue;
  18.         if (!in[xt])
  19.         {
  20.             Tarjan (xt, v);
  21.             if (low[xt]>in[v]) cout << v << " " << xt << endl;
  22.             low[v]=min(low[v], low[xt]);
  23.         }
  24.         else low[v]=min(low[v], in[xt]);
  25.     }
  26. }
  27.  
  28. int main()
  29. {
  30.     scanf ("%d%d", &n, &m);
  31.     for (int i=0;i<m;i++)
  32.     {
  33.         int a, b;
  34.         scanf ("%d%d", &a, &b);
  35.         g[a].push_back(b);
  36.         g[b].push_back(a);
  37.     }
  38.  
  39.     Tarjan(1, 1);
  40.  
  41.     return 0;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment