제출 #1234106

#제출 시각아이디문제언어결과실행 시간메모리
1234106trimkusThousands Islands (IOI22_islands)C++20
35 / 100
121 ms21380 KiB
#include "islands.h" #include <bits/stdc++.h> using namespace std; std::variant<bool, std::vector<int>> find_journey( int N, int M, std::vector<int> U, std::vector<int> V) { vector<vector<array<int, 3>>> adj(N); vector<int> deg(N); for (int i = 0; i < M; ++i) { adj[U[i]].push_back({i, 0, V[i]}); adj[V[i]].push_back({i, 1, U[i]}); } vector<array<int, 2>> state(N); vector<array<int, 2>> state_fin(N); vector<int> edge(M); auto dfs = [&](auto& dfs, int v, int way, int lst) -> bool { if (state_fin[v][way] && !state[v][way]) return false; if (state[v][way]) { if (way == 1) { return true; } way ^= 1; if (state_fin[v][way]) return false; } state[v][way] = 1; state_fin[v][way] = 1; for (auto& [id, dir, u] : adj[v]) { if (edge[id] != dir || lst == id) continue; edge[id] = dir ^ 1; if (dfs(dfs, u, way, id)) return true; edge[id] = dir; } state[v][way] = 0; return false; }; if (dfs(dfs, 0, 0, -1)) return vector<int>({1, 2, 3}); return false; // cout << "\n"; // for (auto& u : state) cout << u << " "; // cout << "\n"; }
#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...