damihenrique

lixoo_verteces

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