fork download
  1. #include <bits/stdc++.h>
  2. #define fi first
  3. #define endl '\n'
  4. #define se second
  5. #define int long long
  6. #define getName(x) #x
  7. #define vi std::vector<int>
  8. #define isz(v) (int) v.size()
  9. #define pii std::pair<int, int>
  10. #define all(v) v.begin(), v.end()
  11. #define loop cerr << "here" << endl;
  12. #define breakLoop if(TIME > 1) break;
  13. #define TIME 1.0 * clock() / CLOCKS_PER_SEC
  14. using namespace std;
  15. typedef long long ll;
  16. const int MAXN = 2e6 + 7;
  17.  
  18. template <typename T> void maximize(T &a, T b){if(a < b) a = b;}
  19. template <typename T> void minimize(T &a, T b){if(a > b) a = b;}
  20. vi save; set <int> s;
  21. int nxt[MAXN], pre[MAXN], n, ans[MAXN], start;
  22. bool check[MAXN];
  23.  
  24. signed main(){
  25. ios::sync_with_stdio(false);
  26. cin.tie(nullptr);
  27. #define task "t"
  28. if (fopen(task".inp", "r")){
  29. freopen(task".inp", "r", stdin);
  30. freopen(task".out", "w", stdout);
  31. }
  32. cin >> n;
  33. for(int i = 1; i <= n; i++){
  34. int x, y;
  35. cin >> x >> y;
  36. s.insert(x), s.insert(y);
  37. nxt[x] = y;
  38. pre[y] = x;
  39. if(x == 0) start = y;
  40. }
  41. for(auto x : s) if(!pre[x]) save.push_back(x);
  42. int curIdx = 2;
  43. while(start){
  44. check[start] = 1;
  45. ans[curIdx] = start;
  46. curIdx += 2;
  47. start = nxt[start];
  48. }
  49. for(auto pos : save){
  50. if(check[pos]) continue;
  51. curIdx = 1;
  52. int curVal = pos;
  53. while(curVal){
  54. ans[curIdx] = curVal;
  55. curIdx += 2;
  56. curVal = nxt[curVal];
  57. }
  58. }
  59. for(int i = 1; i <= n; i++) cout << ans[i] << ' ';
  60. }
  61.  
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
Standard output is empty