sultan

Task B Gym 100165

Mar 12th, 2013
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <string>
  5. #include <map>
  6. #include <set>
  7. #include <vector>
  8. #include <algorithm>
  9. #include <queue>
  10. #include <bitset>
  11. #include <stack>
  12. #include <iostream>
  13. #include <fstream>
  14. #include <cmath>
  15.  
  16. #define sqr(a) ((a)*(a))
  17. #define odd(a) ((a)&1)
  18. #define foru(i,n) for (int i=0;i<(n);i++)
  19. #define ford(i,n) for (int i=(n)-1;i>=0;i--)
  20. #define forab(i,l,r) for (int i=(l);i<=(r);i++)
  21. #define forabd(i,r,l) for (int i=(r);i>=(l);i--)
  22. #define pb push_back
  23. #define F first
  24. #define S second
  25. #define all(x) x.begin(),x.end()
  26. #define sz(__X) (int)__X.size()
  27. #define pii pair<int,int>
  28. #define pb push_back
  29. #define mp make_pair
  30.  
  31. const double eps=1e-19;
  32. const double PI=acos(-1.0);
  33. const int INF=1000*1000*1000+7;
  34. const int MAXN = 200005;
  35.  
  36. using namespace std;
  37.  
  38. int n,m;
  39. vector<int> g[MAXN];
  40. int col[MAXN];
  41. int pr[MAXN];
  42. vector<int> ans;
  43. vector<int> now;
  44. int cicl_st, cicl_end;
  45.  
  46. void update_ans()
  47. {
  48.     now.clear();
  49.     for (int v=cicl_st; v!=cicl_end; v=pr[v])
  50.         now.pb(v);
  51.     now.pb(cicl_end);
  52.     if (sz(now)>sz(ans))
  53.     {
  54.         ans.clear();
  55.         ans.assign( all(now) );
  56.     }
  57. }
  58.  
  59. void dfs(int v, int pred)
  60. {
  61.     col[v] = 1;
  62.     for (int j=0; j<sz(g[v]); j++)
  63.     {
  64.         int u=g[v][j];
  65.         if (u==pred) continue;
  66.         if (col[u]==0)
  67.         {
  68.             pr[u] = v;
  69.             dfs(u, v);
  70.         }
  71.         else if (col[u]==1)
  72.         {
  73.             cicl_end = u; cicl_st=v;
  74.             update_ans();
  75.         }
  76.     }
  77.     col[v]=0;
  78. }
  79.  
  80. int main()
  81. {
  82.     freopen("doggy.in", "r", stdin);
  83.     freopen("doggy.out", "w", stdout);
  84.     scanf("%d %d", &n, &m);
  85.     for (int i=0; i<m; i++)
  86.     {
  87.         int v,u;
  88.         scanf("%d %d", &v, &u);
  89.         v--;u--;
  90.         g[v].pb(u);
  91.         g[u].pb(v);
  92.     }
  93.     ans.pb(0);
  94.     dfs(0, -1);
  95.     printf("%d\n", sz(ans));
  96.     for (int i=0; i<sz(ans); i++)
  97.         printf("%d ", ans[i]+1);
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment