제출 #1064001

#제출 시각아이디문제언어결과실행 시간메모리
1064001vjudge1수천개의 섬 (IOI22_islands)C++17
0 / 100
242 ms416440 KiB
#include "islands.h" #include <bits/stdc++.h> using namespace std; using vi = vector<int>; using ii = pair<int, int>; variant<bool, vi> find_journey(int n, int m, vi U, vi V) { int nr = 2 * m * (1 << m); vector<vector<ii> > L(n); for(int i = 0; i < m; ++i) { int u = U[i], v = V[i]; L[u].push_back({v, 2 * i}); L[v].push_back({u, 2 * i + 1}); } auto get_vec = [&](int bm, int ultm, int u) -> vi { vi Re; for(auto [it, id] : L[u]) { if(id / 2 != ultm && ((id & 1) == !!(bm & (1 << (id / 2))))) { int b2 = bm ^ (1 << (id / 2)); Re.push_back(b2 * 2 * m + id); } } return Re; }; bool ok = false; vi viz(nr, 0); function<void(int)> dfs = [&](int id) { int bm = id / (2 * m); int ultm = id % (2 * m) / 2; int u; if(id & 1) u = U[ultm]; else u = V[ultm]; if(u == 0 && !bm) { ok = 1; //printf("!!!! Am vizitat nodul %d cu muchia %d (%d -> %d), bm=%d\n", u, ultm, U[ultm], V[ultm], bm); return; } if(viz[id]) return; viz[id] = 1; // printf("Am vizitat nodul %d cu muchia %d (%d -> %d), bm=%d\n", u, ultm, U[ultm], V[ultm], bm); auto Vec = get_vec(bm, ultm, u); for(auto it : Vec) { dfs(it); } }; for(auto [it, id]: L[0]) { int bm = (1 << (id / 2)); dfs(bm * 2 * m + id); } return ok; }
#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...