#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;
int uu;
// u already adjacent to v
if (adj[v].count(u)) {
if (k+1 < N && (uu = query(v, k+1)) > 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);
if (k+1 < N && (uu = query(v, k+1)) > 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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |