답안 #150303

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
150303 2019-09-01T08:05:46 Z お前はもう死んでいる(#3784, kuroni, nvmdava, tfg) 로카히아 유적 (FXCUP4_lokahia) C++17
0 / 100
16 ms 768 KB
#include "lokahia.h"
#include <bits/stdc++.h>
using namespace std;

const int N = 205;

mt19937_64 mt(969696);

int n, dsu[N], con[N][N];
vector<int> rt, ve[N];

int rand(int l, int r)
{
	uniform_int_distribution<int> uni(l, r);
	return uni(mt);
}

int trace(int u)
{
	return dsu[u] < 0 ? u : dsu[u] = trace(dsu[u]);
}

int connect(int u, int v)
{
	if ((u = trace(u)) == (v = trace(v)))
		return -1;
	if (dsu[u] > dsu[v])
		swap(u, v);
	dsu[u] += dsu[v];
	dsu[v] = u;
	rt.erase(remove(rt.begin(), rt.end(), v), rt.end());
	vector<int> tmp;
	for (int j = 1; j <= n; j++)
		if (con[u][j] == -1 || con[v][j] == -1)
			tmp.push_back(j);
	for (int &a : ve[u])
		for (int &b : ve[v])
			con[a][b] = con[b][a] = 1;
	for (int &b : ve[v])
		ve[u].push_back(b);
	ve[v].clear();
	for (int &a : ve[u])
		for (int &b : tmp)
			con[a][b] = con[b][a] = -1;
	if (-dsu[u] > n / 2)
		return u;
	return -1;
}

int FindBase(int _n)
{
	n = _n;
	for (int i = 0; i < n; i++)
	{
		dsu[i] = -1;
		ve[i] = {i};
		con[i][i] = 1;
		rt.push_back(i);
	}
	for (int i = 1; i <= 300; i++)
	{
		int u, v, cnt = 0;
		do
		{
			u = rt[rand(0, rt.size() - 1)];
			v = rt[rand(0, rt.size() - 1)];
			cnt++;
		} while (con[u][v] != 0 && cnt <= 1000);
		if (cnt > 1000)
			break;
		int rt = CollectRelics(u, v);
		if (rt == -1)
		{
			for (int &a : ve[u])
				for (int &b : ve[v])
					con[a][b] = con[b][a] = -1;
		}
		else
		{
			connect(rt, u);
			int tmp = connect(rt, v);
			if (tmp >= 0)
				return tmp;
		}
	}
	for (int i = 0; i < n; i++)
		if (-dsu[i] > n / 2)
			return i;
	return -1;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 768 KB Correct : C = 195
2 Correct 5 ms 512 KB Correct : C = 2
3 Correct 13 ms 768 KB Correct : C = 229
4 Correct 6 ms 640 KB Correct : C = 300
5 Correct 7 ms 768 KB Correct : C = 300
6 Incorrect 8 ms 768 KB Wrong
7 Incorrect 6 ms 640 KB Wrong
8 Correct 6 ms 640 KB Correct : C = 31
9 Correct 6 ms 512 KB Correct : C = 0
10 Correct 8 ms 640 KB Correct : C = 121
11 Correct 13 ms 768 KB Correct : C = 221
12 Correct 6 ms 768 KB Correct : C = 300
13 Correct 7 ms 640 KB Correct : C = 300
14 Incorrect 8 ms 768 KB Wrong
15 Correct 6 ms 640 KB Correct : C = 30
16 Correct 8 ms 768 KB Correct : C = 300
17 Incorrect 8 ms 768 KB Wrong
18 Correct 7 ms 768 KB Correct : C = 51
19 Correct 7 ms 640 KB Correct : C = 300
20 Correct 7 ms 768 KB Correct : C = 50
21 Incorrect 6 ms 640 KB Wrong
22 Incorrect 7 ms 768 KB Wrong
23 Correct 9 ms 768 KB Correct : C = 300
24 Correct 7 ms 768 KB Correct : C = 300
25 Correct 6 ms 640 KB Correct : C = 300
26 Correct 6 ms 768 KB Correct : C = 300
27 Correct 7 ms 640 KB Correct : C = 155