Advertisement
nicuvlad76

Untitled

Dec 3rd, 2022
797
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. #include<vector>
  2. #include<fstream>
  3. #include<algorithm>
  4. #include <stack>
  5. #define N 100005
  6. using namespace std;
  7. ifstream fin("componentebiconexe.in");
  8. ofstream fout("componentebiconexe.out");
  9.  
  10. vector<int> G[N];
  11. vector< pair <int , int > >Mc;
  12. vector< vector<int > >biconex;
  13. int bcnt;
  14.  
  15. bool nodc[N], viz[N];
  16. int low[N], level[N];
  17. stack<int> st;
  18.  
  19. void DFS(int nd, int par, int rad)
  20. {
  21.     viz[nd]=1;
  22.     level[nd]=low[nd]=level[par]+1;
  23.     st.push(nd);
  24.     int sonCt=0;
  25.     for(auto adj:G[nd])
  26.     {
  27.         if(adj==par) continue;
  28.         if(viz[adj])
  29.         {
  30.             low[nd]=min(low[nd], level[adj]);
  31.             continue;
  32.         }
  33.          ++sonCt;
  34.          DFS(adj,nd, rad);
  35.          ///muchii critica
  36.          low[nd]=min(low[nd], low[adj]);
  37.          if(level[nd]<low[adj])
  38.             Mc.push_back(make_pair(nd,adj));
  39.          ///biconex
  40.          if(level[nd]<=low[adj])
  41.          {
  42.              ++bcnt;
  43.              biconex.push_back(vector<int>(0));
  44.              int x;
  45.              do
  46.              {
  47.                  x=st.top();
  48.                  st.pop();
  49.                  biconex[bcnt-1].push_back(x);
  50.              }while(x!=adj);
  51.              biconex[bcnt-1].push_back(nd);
  52.             ///nod critic
  53.             if(nd!=rad)  nodc[nd]=1;
  54.          }
  55.     }
  56.     ///nod critic
  57.     if(nd==rad && sonCt>1)
  58.         nodc[nd]=1;
  59. }
  60.  
  61. int main()
  62. {
  63.  int cer;
  64.  fin>>cer;
  65.  int n,m,x,y;
  66.  fin>>n>>m;
  67.  for(int i=1;i<=m;i++)
  68.  {
  69.      fin>>x>>y;
  70.      G[x].push_back(y);
  71.      G[y].push_back(x);
  72.  }
  73.  for(int i=1;i<=n;i++)
  74.     if(!viz[i]) DFS(i,0,i);
  75.  if(cer==1)
  76.  {
  77.      fout<<bcnt<<"\n";
  78.      for(int i=0;i<bcnt;i++)
  79.      {
  80.          fout<<biconex[i].size()<<" ";
  81.          for(int j=0;j<biconex[i].size();j++)
  82.             fout<<biconex[i][j]<<" ";
  83.          fout<<"\n";
  84.      }
  85.  }
  86.  else if(cer==2)
  87.  {
  88.      int cnt=0;
  89.      for(int i=1;i<=n;i++)
  90.         if(nodc[i])cnt++;
  91.      fout<<cnt<<"\n";
  92.      for(int i=1;i<=n;i++)
  93.         if(nodc[i])fout<<i<<" ";
  94.  }
  95.  else{
  96.     fout<<Mc.size()<<"\n";
  97.     for(int i=0;i<Mc.size();i++)
  98.         fout<<Mc[i].first<<" "<<Mc[i].second<<"\n";
  99.  }
  100.  
  101.   return 0;
  102. }
  103.  
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement