SuitNdtie

Connect the Graph mk2

Apr 15th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<vector>
  3. #include<stack>
  4. using namespace std;
  5.  
  6. int n,m;
  7. vector<int> adj[100010];
  8. bool visited[100010];
  9.  
  10. void dfs(int uc)
  11. {
  12.     stack<int> st;
  13.     st.push(uc);
  14.    
  15.     while(!st.empty()){
  16.         int u = st.top();
  17.         st.pop();
  18.         if(visited[u])continue;
  19.         visited[u] = true;
  20.        
  21.         for(int i=0;i<adj[u].size();i++){
  22.             int v = adj[u][i];
  23.             if(!visited[v]){
  24.                 st.push(v);
  25.             }
  26.         }
  27.     }
  28. }
  29.  
  30. int main()
  31. {
  32.     scanf("%d %d",&n,&m);
  33.     for(int i=0;i<m;i++){
  34.         int u,v;
  35.         scanf("%d %d",&u,&v);
  36.         adj[u].push_back(v);
  37.         adj[v].push_back(u);
  38.     }
  39.     int prev = -1;
  40.     vector<pair<int,int> > ans;
  41.     for(int i=1;i<=n;i++){
  42.         if(!visited[i]){
  43.             dfs(i);
  44.             if(prev != -1){
  45.                 ans.push_back({prev,i});
  46.             }
  47.             prev = i;
  48.         }
  49.     }
  50.     printf("%d\n",ans.size());
  51.     for(int i=0;i<ans.size();i++){
  52.         printf("%d %d\n",ans[i].first,ans[i].second);
  53.     }
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment