Submission #1367972

#TimeUsernameProblemLanguageResultExecution timeMemory
1367972mannshah1211Thousands Islands (IOI22_islands)C++20
0 / 100
1117 ms587324 KiB
#include "islands.h"
#include <bits/stdc++.h>
#include <variant>
#include <vector>

using namespace std;

variant<bool, vector<int>> find_journey(int n, int m, vector<int> u, vector<int> v) {
  int cnt = 0;
  for (int i = 0; i < m; i++) {
    if (u[i] == 0) {
      cnt++;
    }
  }
  if (cnt >= 2) {
    vector<int> ans;
    vector<int> zz;
    for (int i = 0; i < m; i++) {
      if (u[i] == 0) {
        zz.push_back(i);
      }
    }
    ans.push_back(zz[0]);
    ans.push_back(zz[0] ^ 1);
    ans.push_back(zz[1]);
    ans.push_back(zz[1] ^ 1);
    ans.push_back(zz[0] ^ 1);
    ans.push_back(zz[0]);
    ans.push_back(zz[1] ^ 1);
    ans.push_back(zz[1]);
    return ans;
  }
  vector<vector<pair<int, int>>> g(n);
  for (int i = 0; i < m; i++) {
    g[u[i]].emplace_back(v[i], i);
  }
  if (cnt == 1) {
    vector<int> ans;
    int uu = 0, p = -1;
    while (true) {
      int cnt_ = 0;
      for (auto [vv, _] : g[uu]) {
        if (vv != p) {
          cnt_++;
        }
      }
      if (cnt_ >= 2) {
        vector<int> aa;
        for (auto [vv, _] : g[uu]) {
          if (vv != p) {
            aa.push_back(_);
          }
        }
        vector<int> prv = ans;
        ans.push_back(aa[0]);
        ans.push_back(aa[0] ^ 1);
        ans.push_back(aa[1]);
        ans.push_back(aa[1] ^ 1);
        ans.push_back(aa[0] ^ 1);
        ans.push_back(aa[0]);
        ans.push_back(aa[1] ^ 1);
        ans.push_back(aa[1]);
        reverse(prv.begin(), prv.end());
        for (int x : prv) {
          ans.push_back(x);
        }
        return ans;
      } else if (cnt_ == 1) {
        for (auto [vv, _] : g[uu]) {
          if (vv != p) {
            ans.push_back(_);
          }
        }
        int vvv = -1;
        for (auto [vv, _] : g[uu]) {
          if (vv != p) {
            vvv = vv;
          }
        }
        uu = vvv;
      }
      if (cnt_ == 0) {
        break;
      }
    }
  }
  return false;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...