BotByte

Articulation Point.cpp

Mar 9th, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.58 KB | None | 0 0
  1. /* Articulation Point */
  2. /* Author : M. A. Rafsan Mazumder */
  3.  
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6. #define MAX 10006
  7.  
  8. int parent[MAX];
  9. int childCnt[MAX];
  10. int low[MAX];
  11. int dfsTime[MAX];
  12. bool vis[MAX];
  13. bool is_AP[MAX];
  14.  
  15. vector<int> adj[MAX];
  16.  
  17. void dfsAP(int u)
  18. {
  19.     static int c = 0;
  20.     vis[u] = true;
  21.     low[u] = dfsTime[u] = c++;
  22.     for(int i=0; i<adj[u].size(); i++){
  23.         int v = adj[u][i];
  24.  
  25.         if(!vis[v]){
  26.             parent[v] = u;
  27.             childCnt[u]++;
  28.             dfsAP(v);
  29.  
  30.             low[u] = min(low[u], low[v]);
  31.  
  32.             if(low[v] >= dfsTime[u]) is_AP[u] = true;
  33.         }
  34.         else {
  35.             if(v != parent[u]){
  36.                 low[u] = min(low[u], dfsTime[v]);
  37.             }
  38.         }
  39.     }
  40. }
  41.  
  42. int main()
  43. {
  44.     //freopen("in.txt", "r", stdin);
  45.     int cases, caseno = 0;
  46.     scanf("%d", &cases);
  47.     while(cases--){
  48.         for(int i=0; i<MAX; i++) adj[i].clear();
  49.         memset(childCnt, 0, sizeof childCnt);
  50.         memset(vis, false, sizeof vis);
  51.         memset(is_AP, false, sizeof is_AP);
  52.         int n, m;
  53.         scanf("%d %d", &n, &m);
  54.         for(int i=1; i<=m; i++){
  55.             int u, v;
  56.             scanf("%d %d", &u, &v);
  57.             adj[u].push_back(v);
  58.             adj[v].push_back(u);
  59.         }
  60.         parent[1] = -1;
  61.         dfsAP(1);
  62.  
  63.         int cntAP = 0;
  64.         if(childCnt[1] > 1) is_AP[1] = true;
  65.         else is_AP[1] = false;
  66.  
  67.         for(int i=1; i<=n; i++){
  68.             if(is_AP[i] == true) cntAP++;
  69.         }
  70.         printf("Case %d: %d\n", ++caseno, cntAP);
  71.     }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment