Advertisement
saske_7

lightoj(1291).cpp

Jan 1st, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.09 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define bound(x,y , i , j) x >= 0 && x < i && y >= 0 && y < j
  6. #define mp make_pair
  7. #define pb push_back
  8. #define pii pair<int , int>
  9. #define sf1(a)  scanf("%d ",&a );
  10. #define M 10005
  11. #define rep(i , n) for(i = 0 ; i< n ;i++ )
  12. #define repi(i , n ) for(i = 0 ; i<= n ; i++ )
  13. #define mem(x , y ) memset(x , y , sizeof x )
  14. #define mx 5000000
  15. #define ff first
  16. #define ss second
  17.  
  18. //int dx[] = { -1 ,+1, 0 , 0 , -1 , -1  , 1 , 1 };
  19. //int dy[] = { 0 , 0, +1, -1  , +1 , -1 , 1 , -1 };
  20.  
  21. //int dx[] = { 1 , 1, 2 , 2  , -1 , -1 , -2 , -2 }; // knight direction
  22. //int dy[] = { 2 , -2, +1, -1 ,2 , -2 , 1 , -1 };
  23.  
  24. vector< int > g[M ] ;
  25. vector<pii > bridge ;
  26.  
  27. int d[M], vis[M], _time, low[M ], par[M ], _count, num ;
  28. int arr[M], track[M]  ;
  29.  
  30. void clr()
  31. {
  32.     int i ;
  33.     _count =  0  ;
  34.     mem(arr, 0 );
  35.     rep(i, M )
  36.     {
  37.         g[i].clear() ;
  38.         track[i] = par[i] =  i ;
  39.     }
  40.     mem(vis, -1 );
  41.     mem(d, 0) ;
  42.     mem(low, 0 ) ;
  43.     bridge.clear();
  44. }
  45.  
  46. int find(int a )
  47. {
  48. // printf("find %d %d\n", par[a]);
  49.     if(par[a] ==  a) return a ;
  50.     else return par[a] =  find(par[a]) ;
  51.  
  52. }
  53. void make(int a, int b )
  54. {
  55.     int u = find(a );
  56.     int v = find(b );
  57. //  printf("received %d %d %d %d\n", a , b , u ,v);
  58.     if(u != v )
  59.     {
  60.         par[u] =  v ;
  61.         //  printf("par %d %d %d \n", u , v ,par[u]) ;
  62.     }
  63. }
  64.  
  65. void dfs(int u )
  66. {
  67.     int i ;
  68.     ++_time  ;
  69.     d[u] = low[u] =  _time ;
  70.  
  71.     vis[u] = 1;
  72.  
  73.     rep(i,g[u].size() )
  74.     {
  75.         int v = g[u][i ];
  76.         if( v == track[u] ) continue  ;
  77.         if(vis[v] !=  -1  )
  78.         {
  79.             low[u] = min(low[u], d[v] );
  80.             // backedge
  81.         }
  82.         else
  83.         {
  84.             track[v] = u ;
  85.             dfs(v ) ;
  86.  
  87.             low[u] =  min(low[v], low[u] );
  88.             if(d[u] < low[v]  )
  89.             {
  90.                 bridge.pb(mp(u, v));
  91.                 int hh = bridge.size() -1 ;
  92.                 //  printf("bridge %d %d\n", bridge[hh].ff , bridge[hh].ss ) ;
  93.             }
  94.             else
  95.             {
  96.                 //  printf("herre %d %d %d %d\n", u , v , par[u] , par[v]);
  97.  
  98.                 make(u, v);
  99.  
  100.             }
  101.         }
  102.     }
  103. }
  104.  
  105. int main()
  106. {
  107.  
  108.     //freopen("in.txt" ,"r", stdin );
  109.  
  110.     int i, j, k, cs= 0, tc ;
  111.     sf1(tc ) ;
  112.  
  113.     while(tc-- )
  114.     {
  115.         clr();
  116.         int n, qr ;
  117.         scanf("%d%d", &n, &qr );
  118.  
  119.         while(qr--)
  120.         {
  121.             scanf("%d%d",&i, &j ) ;
  122.  
  123.             g[i].pb(j );
  124.             g[j].pb(i );
  125.  
  126.         }
  127.  
  128.         dfs(0) ;
  129.         //  rep(i , n) {
  130.         //  printf("%d ", find(i));
  131.         //}
  132.         //printf("\n\n");
  133.         rep(i, bridge.size() )
  134.         {
  135.             int u =  find( bridge[i].ff);
  136.             int v =  find( bridge[i].ss);
  137.             //    printf("u v %d %d\n", u , v);
  138.             arr[u]++ ;
  139.             arr[v ]++;
  140.  
  141.         }
  142.         //  printf("after dfs \n") ;
  143.         k =  0 ;
  144.  
  145.         rep(i, n ) if(arr[i] ==  1) k++ ;
  146.  
  147.         k++;
  148.         k/=2;
  149.         printf("Case %d: %d\n",++cs, k );
  150.     }
  151.  
  152.     return 0;
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement