Advertisement
nicuvlad76

Untitled

Dec 3rd, 2022
725
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.06 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.  
  51.              }while(x!=adj);
  52.              biconex[bcnt-1].push_back(nd);
  53.             ///nod critic
  54.             if(nd!=rad)  nodc[nd]=1;
  55.          }
  56.     }
  57. }
  58.  
  59. int main()
  60. {
  61.  int cer;
  62.  fin>>cer;
  63.  int n,m,x,y;
  64.  fin>>n>>m;
  65.  for(int i=1;i<=m;i++)
  66.  {
  67.      fin>>x>>y;
  68.      G[x].push_back(y);
  69.      G[y].push_back(x);
  70.  }
  71.  for(int i=1;i<=n;i++)
  72.     if(!viz[i]) DFS(i,0,i);
  73.  if(cer==1)
  74.  {
  75.      fout<<bcnt<<"\n";
  76.      for(int i=0;i<bcnt;i++)
  77.      {
  78.          fout<<biconex[i].size()<<" ";
  79.          for(int j=0;j<biconex[i].size();j++)
  80.             fout<<biconex[i][j]<<" ";
  81.          fout<<"\n";
  82.      }
  83.  }
  84.  else if(cer==2)
  85.  {
  86.      int cnt=0;
  87.      for(int i=1;i<=n;i++)
  88.         if(nodc[i])cnt++;
  89.      fout<<cnt<<"\n";
  90.      for(int i=1;i<=n;i++)
  91.         if(nodc[i])fout<<i<<" ";
  92.  }
  93.  else{
  94.     fout<<Mc.size()<<"\n";
  95.     for(int i=0;i<Mc.size();i++)
  96.         fout<<Mc[i].first<<" "<<Mc[i].second<<"\n";
  97.  }
  98.  
  99.   return 0;
  100. }
  101.  
  102.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement