Advertisement
Guest User

Untitled

a guest
Jul 26th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <ctime>
  6. #include <cmath>
  7. #include <cctype>
  8. #include <vector>
  9. #include <string>
  10. #include <queue>
  11. #include <stack>
  12. #include <set>
  13. #include <map>
  14. #include <iterator>
  15. #include <functional>
  16. #include <cassert>
  17. #include <algorithm>
  18.  
  19. typedef long long LL;
  20. typedef long double LD;
  21. using namespace std;
  22.  
  23. int n;
  24. vector <pair <int, pair <int, int> > > e;
  25. vector <vector <int> > g;
  26. vector <int> deg;
  27.  
  28. int main()
  29. {
  30. freopen("g.in", "r", stdin);
  31. freopen("g.out", "w", stdout);
  32.  
  33. scanf("%d", &n);
  34. for (int i = 0; i < n; ++i)
  35. for (int j = 0; j < n; ++j)
  36. {
  37. int len;
  38. scanf("%d", &len);
  39. if (len != -1)
  40. e.push_back(make_pair(len, make_pair(i, j)));
  41. }
  42. sort(e.begin(), e.end(), greater <pair <int, pair <int, int> > > ());
  43.  
  44. deg.assign(n, 0);
  45. int cnt = 0;
  46. vector <pair <int, int> > ans;
  47. for (size_t i = 0; i < e.size(); ++i)
  48. if (deg[e[i].second.first] + deg[e[i].second.second] < 2 || cnt == n - 1 && max(deg[e[i].second.first], deg[e[i].second.second]) == 1)
  49. {
  50. ++deg[e[i].second.first];
  51. ++deg[e[i].second.second];
  52. ans.push_back(make_pair(e[i].second.first, e[i].second.second));
  53. ++cnt;
  54. }
  55.  
  56. #ifdef DEBUG
  57. for (size_t i = 0; i < ans.size(); ++i)
  58. cerr << ans[i].first << ' ' << ans[i].second << '\n';
  59. #endif
  60.  
  61.  
  62. g.resize(n);
  63. for (size_t i = 0; i < ans.size(); ++i)
  64. {
  65. g[ans[i].first].push_back(ans[i].second);
  66. g[ans[i].second].push_back(ans[i].first);
  67. }
  68.  
  69. #ifdef DEBUG
  70. cerr << endl;
  71. for (int i = 0 ; i < n; ++i)
  72. {
  73. for (int j = 0; j < g[i].size(); ++j)
  74. cerr << g[i][j] << ' ';
  75. cerr << endl;
  76. }
  77.  
  78. #endif
  79.  
  80. vector <char> act(n, 0);
  81. int cur = 0;
  82. for (int i = 0; i < n; ++i)
  83. {
  84. act[cur] = 1;
  85. #ifdef DEBUG
  86. cerr << "iter " << i << ' ';
  87. for (int i = 0; i < n; ++i)
  88. cerr << (int)act[i] << ' ';
  89. cerr << endl;
  90. #endif
  91. printf("%d ", cur + 1);
  92. for (size_t j = 0; j < g[cur].size(); ++j)
  93. if (!act[g[cur][j]])
  94. {
  95. cur = g[cur][j];
  96. break;
  97. }
  98. }
  99. printf("1\n");
  100.  
  101. return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement