unlucky_13

uva_ 796 - Critical Links

May 22nd, 2013
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<vector>
  5. #include<queue>
  6. #include<cmath>
  7. #include<utility>
  8. #include<set>
  9. #include<vector>
  10. #include<cstring>
  11. using namespace std;
  12.  
  13. vector<int>to[10010];
  14. int dfsn[10010],low[10010],tim,n;
  15. vector<pair<int,int> >ans;
  16. void reset(){
  17.         for(int i=0;i<n;i++) to[i].clear();
  18.         tim=0;
  19.         ans.clear();
  20.         memset(dfsn,-1,sizeof(dfsn)) ;
  21.         memset(low,0,sizeof(low)) ;
  22.    
  23. }
  24.    
  25.    
  26. void DFS(int u,int p)
  27. {
  28.    
  29.     dfsn[u]=low[u]=++tim;
  30.    
  31.     for(int i=0;i<(int)to[u].size();i++)
  32.     {
  33.         int v=to[u][i];
  34.         if(dfsn[v]==-1){
  35.             DFS(v,u);
  36.             low[u]=min(low[u],low[v]);
  37.             if(low[v]>dfsn[u]){
  38.                 if(u>v) ans.push_back(make_pair(v,u));
  39.                 else ans.push_back(make_pair(u,v));
  40.             }
  41.         }
  42.        
  43.         else if(v!=p)low[u]=min(low[u],dfsn[v]);
  44.  
  45.     }
  46.    
  47. }
  48.  
  49.  
  50. int main(){
  51.    
  52.      freopen("C:\\Users\\Mazhar\\Desktop\\Text_Files\\in.txt", "r", stdin);
  53.      
  54.      //bool blank = true ;
  55.    
  56.      while(scanf("%d",&n)!=EOF){
  57.          
  58.          
  59.        // if(blank) blank = false ;
  60.        // else printf("\n") ;
  61.  
  62.         reset() ;
  63.         for(int i=0;i<n;i++){
  64.             int u,k;
  65.             scanf("%d (%d)",&u,&k);
  66.  
  67.             while(k--){
  68.                 int v;
  69.                 scanf("%d",&v);
  70.                 to[u].push_back(v);
  71.               //  to[v].push_back(u);
  72.             }
  73.            
  74.         }
  75.  
  76.  
  77.  
  78.         for(int i=0;i<n;i++){
  79.             if(dfsn[i]==-1)   DFS(i,-1);
  80.         }
  81.  
  82.  
  83.        
  84.        sort(ans.begin(),ans.end());
  85.        
  86.        printf("%d critical links\n",int(ans.size()));
  87.  
  88.        for(int i=0;i<(int)ans.size();i++)
  89.        {
  90.  
  91.             printf("%d - %d\n",ans[i].first,ans[i].second);
  92.        }
  93.        
  94.        printf("\n");
  95.      
  96.      
  97.      }
  98.      
  99.  
  100.  
  101.  
  102.     return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment