damihenrique

lixo_pontes

Sep 3rd, 2014
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.03 KB | None | 0 0
  1. vector<int> adj[MAXV];
  2. int dfs_num[MAXV], dfs_low[MAXV], dfs_parent[MAXV];
  3. int dfscounter, V, dfsRoot, rootChildren, ans;  
  4.  
  5.  
  6. void pontes(int u) {
  7.  
  8.         dfs_low[u] = dfs_num[u] = dfscounter++;
  9.         int tam = adj[u].size();
  10.        
  11.         rep(j,0,tam){
  12.              int v = adj[u][j];
  13.              if (dfs_num[v] == -1) {
  14.                 dfs_parent[v] = u;
  15.                 pontes(v);
  16.                 if (dfs_low[v] > dfs_num[u]){
  17.                     ans++;
  18.                     cout<<"Ponte entre "<<v<<" - "<<u<<endl;
  19.                 }
  20.                 dfs_low[u] = min(dfs_low[u], dfs_low[v]);
  21.              }
  22.              else if (v != dfs_parent[u])
  23.                   dfs_low[u] = min(dfs_low[u], dfs_num[v]);
  24.         }
  25. }
  26.  
  27.  
  28. int main(){
  29.  
  30.     rep(i,0,V+1){
  31.               dfs_low[i] = dfs_parent[i] = 0;
  32.               dfs_num[i] = -1;
  33.         }
  34.         ans = 0;                
  35.         rep(i,0,V)
  36.         if (dfs_num[i] == -1) {
  37.              dfsRoot = i;
  38.              pontes(i);
  39.         }    
  40.     printf("%d\n",ans);
  41. }
Advertisement
Add Comment
Please, Sign In to add comment