제출 #1160169

#제출 시각아이디문제언어결과실행 시간메모리
1160169usuyusIsland Hopping (JOI24_island)C++20
65 / 100
3 ms464 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;
		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 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...