Advertisement
Jasir

Bridges

May 9th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.87 KB | None | 0 0
  1. int dfs_num[mx], dfs_cnt, dfs_low[mx], dfs_parent[mx], n;
  2. vector < pair<int, int> > critical;
  3. vector <int> graph[mx];
  4.  
  5. void bridges(int u);
  6.  
  7. void init(){
  8.     memset(dfs_num, 0, sizeof dfs_num);
  9.     dfs_cnt = 1;
  10.     for(int i=1;i<=n;i++){
  11.         if(dfs_num[i]==0){
  12.             bridges(i);
  13.         }
  14.     }
  15. }
  16.  
  17. void bridges(int u){
  18.     dfs_low[u] = dfs_num[u] = dfs_cnt++;
  19.     for(int i=0;i<graph[u].size();i++){
  20.         if(dfs_num[graph[u][i]]==0){
  21.             dfs_parent[graph[u][i]] = u;
  22.             bridges(graph[u][i]);
  23.             if(dfs_low[graph[u][i]]>dfs_num[u]){
  24.                 critical.push_back({min(u, graph[u][i]),max(u, graph[u][i])});
  25.             }
  26.             dfs_low[u] = min(dfs_low[u], dfs_low[graph[u][i]]);
  27.         }
  28.         else if(dfs_parent[u]!=graph[u][i]){
  29.             dfs_low[u] = min(dfs_low[u], dfs_num[graph[u][i]]);
  30.         }
  31.     }
  32. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement