Submission #1160168

#TimeUsernameProblemLanguageResultExecution timeMemory
1160168usuyusIsland Hopping (JOI24_island)C++20
22 / 100
3 ms448 KiB
#include "island.h" #include <bits/stdc++.h> using namespace std; void solve(int N, int L) { vector<set<int>> adj(N+1); // {-u, v, k}; query(v, k) = u priority_queue<array<int, 3>> pq; for (int v = 1; v <= N; v++) { pq.push({-query(v, 1), v, 1}); } while (!pq.empty()) { auto [u, v, k] = pq.top(); pq.pop(); u *= -1; // u already adjacent to v? if (adj[v].count(u)) { int uu = query(v, k+1); if (uu < N && uu > u) { pq.push({-uu, v, k+1}); } continue; } // is there a common vertex between u and v? set<int> isect; set_intersection( adj[u].begin(), adj[u].end(), adj[v].begin(), adj[v].end(), inserter(isect, isect.begin()) ); if (isect.empty()) { adj[u].insert(v); adj[v].insert(u); int uu = query(v, k+1); if (uu < N && uu > u) { pq.push({-uu, v, k+1}); } } } for (int v = 1; v <= N; v++) { for (int u : adj[v]) { if (u < v) answer(u, v); } } }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...