Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include"bits/stdc++.h"
- using namespace std;
- #define mp make_pair
- #define pb push_back
- vector< pair<int,int> > original;
- set<int> adj[100005];
- set< pair<int,int> > tour;
- void dfs(int v, bool visited[])
- {
- visited[v] = true;
- set<int>::iterator i;
- for (i = adj[v].begin(); i != adj[v].end(); ++i)
- if (!visited[*i])
- dfs(*i, visited);
- }
- void findtour(int u)
- {
- while(!adj[u].empty())
- {
- set<int>::iterator it=adj[u].begin();
- int e=*it;
- adj[u].erase(e);
- adj[e].erase(u);
- tour.insert(mp(u,e));
- findtour(e);
- }
- }
- int main()
- {
- int n,e;
- bool ok=true;
- scanf("%d%d",&n,&e);
- int i,j;
- int freq[100005]={0};
- original.clear();
- //adj.clear();
- for(i=0;i<e;i++)
- {
- int u,v;
- scanf("%d%d",&u,&v);
- original.pb(mp(u,v));
- freq[u]+=2;
- freq[v]+=2;
- adj[u].insert(v);
- adj[v].insert(u);
- }
- /*check for degrees*/
- for(i=0;i<n+1;i++)
- {
- if((freq[i]/2)&1)
- ok=false;
- }
- /*check for connected graph*/
- bool visited[n+1];
- // int i;
- for (i = 0; i < n+1; i++)
- visited[i] = false;
- for (i = 1; i < n+1; i++)
- if (adj[i].size() != 0)
- break;
- dfs(i,visited);
- for (i = 1; i < n+1; i++)
- if (visited[i] == false && adj[i].size() > 0)
- ok=false;
- if(!ok)
- {
- cout<<"NO"<<endl;
- }
- else
- {
- findtour(1);
- cout<<"YES"<<endl;
- for(vector< pair<int,int> >::iterator it=original.begin();it!=original.end();it++)
- {
- if(tour.find(mp(it->first,it->second))!=tour.end())
- cout<<it->first<<" "<<it->second<<endl;
- else
- cout<<it->second<<" "<<it->first<<endl;
- //cout<<it->first<<" "<<it->second<<endl;
- }
- }
- }
Add Comment
Please, Sign In to add comment