제출 #1160167

#제출 시각아이디문제언어결과실행 시간메모리
1160167usuyusIsland 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)) {
			pq.push({-query(v, k+1), v, k+1});
			continue;
		}

		// there's 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);
			pq.push({-query(v, k+1), 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...