Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<vector>
- #include<stack>
- using namespace std;
- int n,m;
- vector<int> adj[100010];
- bool visited[100010];
- void dfs(int uc)
- {
- stack<int> st;
- st.push(uc);
- while(!st.empty()){
- int u = st.top();
- st.pop();
- if(visited[u])continue;
- visited[u] = true;
- for(int i=0;i<adj[u].size();i++){
- int v = adj[u][i];
- if(!visited[v]){
- st.push(v);
- }
- }
- }
- }
- int main()
- {
- scanf("%d %d",&n,&m);
- for(int i=0;i<m;i++){
- int u,v;
- scanf("%d %d",&u,&v);
- adj[u].push_back(v);
- adj[v].push_back(u);
- }
- int prev = -1;
- vector<pair<int,int> > ans;
- for(int i=1;i<=n;i++){
- if(!visited[i]){
- dfs(i);
- if(prev != -1){
- ans.push_back({prev,i});
- }
- prev = i;
- }
- }
- printf("%d\n",ans.size());
- for(int i=0;i<ans.size();i++){
- printf("%d %d\n",ans[i].first,ans[i].second);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment