Guest User

Untitled

a guest
Nov 13th, 2016
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.70 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <algorithm>
  4. #include <vector>
  5. #include <cstring>
  6. #include <deque>
  7. #include <stack>
  8. #include <stdio.h>
  9. #include <map>
  10. #include <set>
  11. #include <time.h>
  12. #include <string>
  13. #include <fstream>
  14. #include <queue>
  15. #include <bitset>
  16. #include <cstdlib>
  17. #define X first
  18. #define Y second
  19. #define mp make_pair
  20. #define pb push_back
  21. #define pdd pair<double,double>
  22. #define pii pair<ll,ll>
  23. #define PI 3.14159265358979323846
  24. #define MOD 1000000007
  25. #define MOD2 1000000009
  26. #define INF ((ll)1e+18)
  27. #define x1 fldgjdflgjhrthrl
  28. #define x2 fldgjdflgrtyrtyjl
  29. #define y1 fldggfhfghjdflgjl
  30. #define y2 ffgfldgjdflgjl
  31. #define N 200002
  32. #define SUM 23423
  33. #define MAG 1048576
  34. #define OPEN 0
  35. #define CLOSE 1
  36. typedef int ll;
  37. typedef long double ld;
  38. using namespace std;
  39. ll i,j,n,k,l,m,tot, flag,h,r,ans, K,x1,y1,x2,y2,x3,y3,mmx,mmy,x,y,z,ysz;
  40. ll a[200005], used[800500], w[200500];
  41. char b[10005][10005];
  42. vector<ll> g[100500], f, f1, f2;
  43. vector<pii> ff;
  44. bool cmp(ll x, ll y)
  45. {
  46. return w[x]<w[y];
  47. }
  48. void dfs(ll v)
  49. {
  50. f.push_back(v);
  51. used[v] = 1;
  52. h = g[v].size();
  53. for (int i = 0; i < h; i++)
  54. a[i] = i;
  55. sort(g[v].begin(), g[v].end(), cmp);
  56. for (int i = 0; i < g[v].size(); i++)
  57. {
  58. ll to = g[v][a[i]];
  59. if (!used[to])
  60. {
  61. w[v]--;
  62. w[to]--;
  63. dfs(to);
  64. return;
  65. }
  66. }
  67. }
  68. int main() {
  69. //freopen("input.txt","r",stdin);
  70. //freopen("output.txt","w",stdout);
  71. cin >> n >> m;
  72. for (i = 0; i < m; i++)
  73. {
  74. cin >> x >> y;
  75. g[x].push_back(y);
  76. g[y].push_back(x);
  77. b[x][y] = b[y][x] = 1;
  78. }
  79. y = n+5;
  80. for (i = 1; i <= n; i++)
  81. {
  82. ff.push_back(mp((int)g[i].size(), i));
  83. }
  84. sort(ff.begin(), ff.end());
  85. srand(time(0));
  86. for (j = 0; j < min(n,100); j++)
  87. {
  88. for (i = 1; i <= n; i++)
  89. {
  90. used[i] = 0;
  91. w[i] = g[i].size();
  92. }
  93. x = ff[j].Y;
  94. f.clear();
  95. dfs(x);
  96. f1.clear();
  97. for (i = 0; i < f.size(); i++)
  98. f1.push_back(f[i]);
  99. reverse(f1.begin(), f1.end());
  100. f.clear();
  101. dfs(x);
  102. for (i = 1; i < f.size(); i++)
  103. f1.push_back(f[i]);
  104. if (f1.size() > f2.size())
  105. {
  106. f2.clear();
  107. for (i = 0; i < f1.size(); i++)
  108. f2.push_back(f1[i]);
  109. }
  110. }
  111. for (i = 1; i <= n; i++)
  112. used[i] = 0;
  113. f = f2;
  114. for (i = 0; i < f.size(); i++)
  115. used[f[i]] = 1;
  116. for (int tt = 0; tt < 10; tt++)
  117. {
  118. for (i = 1; i <= n; i++)
  119. {
  120. if (!used[i])
  121. {
  122. for (j = 0; j+1 < f.size(); j++)
  123. if (b[f[j]][i] && b[f[j+1]][i])
  124. {
  125. f.push_back(i);
  126. ll sz = f.size();
  127. for (k = sz-1; k >= j+2; k--)
  128. swap(f[k], f[k-1]);
  129. used[i] = 1;
  130. break;
  131. }
  132. }
  133. }
  134. }
  135. cout << f.size() << endl;
  136. for (i = 0; i < f.size(); i++)
  137. cout << f[i] << " ";
  138. return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment