Submission #881792

#TimeUsernameProblemLanguageResultExecution timeMemory
881792NK_Meetings (JOI19_meetings)C++17
100 / 100
506 ms1660 KiB
// Success consists of going from failure to failure without loss of enthusiasm
#include <bits/stdc++.h>
#include "meetings.h"

using namespace std;

#define nl '\n'
#define pb push_back
#define sz(x) int(x.size())

template<class T> using V = vector<T>;
using vi = V<int>;

const int nax = 2005;
vi can[nax];

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int piv;
int cmp(int x, int y) {
	// x < y
	return Query(piv, x, y) == x;
}

void solve(vi A) {
	if (sz(A) <= 1) return;

	shuffle(begin(A), end(A), rng);

	int u = A[0], v = A[1];

	for(auto x : A) can[x] = {};

	vi P;
	can[u].pb(u); can[v].pb(v);
	for(auto x : A) {
		if (x == u || x == v) continue;
		int r = Query(x, u, v);
		if (r == x) P.pb(r);
		can[r].pb(x);
	}

	piv = u;
	stable_sort(begin(P), end(P), cmp);
	P.insert(begin(P), u); P.pb(v);

	for(int i = 1; i < sz(P); i++) Bridge(min(P[i], P[i-1]), max(P[i], P[i-1]));

	for(auto i : P) solve(can[i]);
}

void Solve(int N) {
	vi A(N); iota(begin(A), end(A), 0);
	solve(A);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...