제출 #826152

#제출 시각아이디문제언어결과실행 시간메모리
826152LittleCube수천개의 섬 (IOI22_islands)C++17
9.10 / 100
27 ms9624 KiB
#include "islands.h" #include <bits/stdc++.h> #define ll long long #define pii pair<int, int> #define F first #define S second using namespace std; namespace { int K; vector<int> path; int vis[100000], use[200000], p[100000], pe[100000], deg[100000]; vector<pii> E[100000]; void dfs(int u) { vis[u] = 1; for (auto [v, i] : E[u]) if (vis[v] == 0) { p[v] = u; pe[v] = i; dfs(v); deg[u]++; } else if (vis[v] == 1 && v != p[u]) use[i] = 1; } } variant<bool, vector<int>> find_journey(int N, int M, vector<int> U, vector<int> V) { for (int i = 0; i < M; i++) E[U[i]].emplace_back(pii(V[i], i)); p[0] = -1; dfs(0); if (*max_element(deg, deg + N) >= 2) { int k = max_element(deg, deg + N) - deg; vector<int> down, branch, sol; for (int i = 0; i < N; i++) if (p[i] == k) branch.emplace_back(pe[i]); while (k) { down.emplace_back(pe[k]); k = p[k]; } reverse(down.begin(), down.end()); sol.insert(sol.end(), down.begin(), down.end()); for (int i : branch) sol.emplace_back(i), sol.emplace_back(i ^ 1); for (int i : branch) sol.emplace_back(i ^ 1), sol.emplace_back(i); reverse(down.begin(), down.end()); for (int i : down) sol.emplace_back(i ^ 1); return sol; } if (*max_element(use, use + M) >= 1) { int eid = max_element(use, use + M) - use; int u = U[eid], v = V[eid]; vector<int> up, vp, sol; while (u) { up.emplace_back(pe[u]); u = p[u]; } while (v) { vp.emplace_back(pe[v]); v = p[v]; } reverse(up.begin(), up.end()); reverse(vp.begin(), vp.end()); if (up.size() > vp.size()) eid ^= 1, swap(up, vp); vp = vector<int>(vp.begin() + up.size(), vp.end()); sol.insert(sol.end(), up.begin(), up.end()); sol.emplace_back(eid); reverse(vp.begin(), vp.end()); for (auto i : vp) sol.emplace_back(i ^ 1); reverse(vp.begin(), vp.end()); sol.insert(sol.end(), vp.begin(), vp.end()); sol.emplace_back(eid ^ 1); for (auto i : vp) sol.emplace_back(i ^ 1); sol.emplace_back(eid); sol.emplace_back(eid ^ 1); reverse(vp.begin(), vp.end()); sol.insert(sol.end(), vp.begin(), vp.end()); return sol; } return false; }

컴파일 시 표준 에러 (stderr) 메시지

islands.cpp:11:9: warning: '{anonymous}::K' defined but not used [-Wunused-variable]
   11 |     int K;
      |         ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...