Guest User

TOURISTS

a guest
Jan 23rd, 2017
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  1. #include"bits/stdc++.h"
  2. using namespace std;
  3. #define mp make_pair
  4. #define pb push_back
  5. vector< pair<int,int> > original;
  6. set<int> adj[100005];
  7. set< pair<int,int> > tour;
  8. void dfs(int v, bool visited[])
  9. {
  10.     visited[v] = true;
  11.  
  12.     set<int>::iterator i;
  13.     for (i = adj[v].begin(); i != adj[v].end(); ++i)
  14.         if (!visited[*i])
  15.             dfs(*i, visited);
  16. }
  17. void findtour(int u)
  18. {
  19.     while(!adj[u].empty())
  20.     {
  21.         set<int>::iterator it=adj[u].begin();
  22.         int e=*it;
  23.         adj[u].erase(e);
  24.         adj[e].erase(u);
  25.         tour.insert(mp(u,e));
  26.         findtour(e);
  27.     }
  28.    
  29.    
  30. }
  31. int main()
  32. {
  33.     int n,e;
  34.         bool ok=true;
  35.     scanf("%d%d",&n,&e);
  36.     int i,j;
  37.     int freq[100005]={0};
  38.     original.clear();
  39.     //adj.clear();
  40.     for(i=0;i<e;i++)
  41.     {
  42.         int u,v;
  43.         scanf("%d%d",&u,&v);
  44.         original.pb(mp(u,v));
  45.         freq[u]+=2;
  46.         freq[v]+=2;
  47.         adj[u].insert(v);
  48.         adj[v].insert(u);
  49.     }
  50.     /*check for degrees*/
  51.     for(i=0;i<n+1;i++)
  52.     {
  53.         if((freq[i]/2)&1)
  54.         ok=false;
  55.     }
  56.     /*check for connected graph*/
  57.     bool visited[n+1];
  58.   //  int i;
  59.     for (i = 0; i < n+1; i++)
  60.         visited[i] = false;
  61.     for (i = 1; i < n+1; i++)
  62.         if (adj[i].size() != 0)
  63.             break;
  64.     dfs(i,visited);
  65.     for (i = 1; i < n+1; i++)
  66.        if (visited[i] == false && adj[i].size() > 0)
  67.             ok=false;
  68.     if(!ok)
  69.     {
  70.         cout<<"NO"<<endl;
  71.     }
  72.     else
  73.     {
  74.         findtour(1);
  75.         cout<<"YES"<<endl;
  76.         for(vector< pair<int,int> >::iterator it=original.begin();it!=original.end();it++)
  77.         {
  78.             if(tour.find(mp(it->first,it->second))!=tour.end())
  79.             cout<<it->first<<" "<<it->second<<endl;
  80.             else
  81.             cout<<it->second<<" "<<it->first<<endl;
  82.             //cout<<it->first<<" "<<it->second<<endl;
  83.         }
  84.     }
  85. }
Add Comment
Please, Sign In to add comment