Advertisement
Ishmam_Rahman

1026 - Critical Links (LightOJ)

Mar 28th, 2020
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.29 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef vector<int> vi;
  4. typedef vector<long long> vll;
  5. typedef pair<int,int> pii;
  6. typedef vector< pii > vii;
  7.  
  8. #define ll          long long
  9. #define ff          first
  10. #define ss          second
  11. #define pb          push_back
  12. #define mkp         make_pair
  13. #define sz          size()
  14.  
  15. #define forf(a,b,c)    for(int i=a;i<=b;i+=c)
  16. #define forr(a,b,c)    for(int i=a;i>=b;i-=c)
  17. #define all(a)      a.begin(),a.end()
  18. #define mem(a,b)    memset(a,b,sizeof(a))
  19. #define pi          2*acos(0.0)
  20. #define End         return 0;
  21.  
  22. vector<int>adj[10007];
  23. //bool visit[100007];
  24. int low[10007],AP[10007],discovery[10007];
  25. int Time=0;
  26. vector< pair<int,int> >res;
  27.  
  28. bool sortbysec(const pair<int,int> &a,
  29.               const pair<int,int> &b)
  30. {
  31.     if(a.ff==b.ff) return a.ss<b.ss;
  32.     return (a.ff < b.ff);
  33. }
  34.  
  35.  
  36. void dfsAP(int src, int parent){
  37.     low[src]=discovery[src]= (++Time);
  38.  
  39.     int children=0;
  40.     for(int i=0;i<adj[src].size();i++){
  41.         int w=adj[src][i];
  42.  
  43.         if(w!=parent){
  44.             if(discovery[w]==0){
  45.                 children++;
  46.                 dfsAP(w,src);
  47.  
  48.                 if(discovery[src]<low[w]) res.push_back(make_pair(src,w)); //Condition 1
  49.                 low[src]=min(low[src],low[w]);
  50.             }
  51.  
  52.             else{
  53.                 low[src]=min(low[src],discovery[w]);
  54.             }
  55.         }
  56.     }
  57.     return;
  58. }
  59.  
  60.  
  61. int main()
  62. {
  63.     int t; cin>>t;
  64.     for(int o=1;o<=t;o++){
  65.  
  66.             memset(low,0,sizeof(low));
  67.             memset(discovery,0,sizeof(discovery));
  68.     Time=0;
  69.     int n;
  70.     cin>>n;
  71.  
  72.     for(int i=0;i<n;i++) {
  73.         int u,k; char ch;
  74.         scanf("%d %c%d%c",&u,&ch,&k,&ch);
  75.         for(int I=0;I<k;I++){
  76.             int kk; cin>>kk;
  77.             if(u<kk){
  78.             adj[u].push_back(kk);
  79.             adj[kk].push_back(u);
  80.             }
  81.         }
  82.     }
  83.  
  84.  
  85.     cout<<"Case "<<o<<":"<<endl;
  86.     cout<<res.sz<<" critical links"<<endl;
  87.  
  88.  
  89.     for(int i=0;i<res.sz;i++){
  90.         if(res[i].ff>res[i].ss) swap(res[i].ff,res[i].ss);
  91.     }
  92.  
  93.     sort(all(res),sortbysec);
  94.  
  95.     for(int i=0;i<res.sz;i++){
  96.         cout<<res[i].ff<<" - "<<res[i].ss<<endl;
  97.     }
  98.     for(int i=0;i<10007;i++) {
  99.         adj[i].clear();
  100.     }
  101.     res.clear();
  102. }
  103. return 0;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement