#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> 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;
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;
}
for (int i = 1; i <= 300; i++)
{
int u, v, cnt = 0;
do
{
u = rand(0, n - 1);
v = rand(0, n - 1);
cnt++;
} while (con[u][v] != 0 && cnt <= 100);
if (cnt > 100)
break;
u = trace(u); v = trace(v);
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 |
7 ms |
640 KB |
Correct : C = 300 |
2 |
Correct |
5 ms |
512 KB |
Correct : C = 0 |
3 |
Correct |
6 ms |
768 KB |
Correct : C = 63 |
4 |
Incorrect |
9 ms |
768 KB |
Wrong |
5 |
Correct |
9 ms |
640 KB |
Correct : C = 143 |
6 |
Correct |
6 ms |
640 KB |
Correct : C = 39 |
7 |
Incorrect |
16 ms |
768 KB |
Wrong |
8 |
Correct |
6 ms |
640 KB |
Correct : C = 300 |
9 |
Correct |
7 ms |
640 KB |
Correct : C = 149 |
10 |
Correct |
5 ms |
512 KB |
Correct : C = 4 |
11 |
Correct |
9 ms |
768 KB |
Correct : C = 300 |
12 |
Correct |
7 ms |
768 KB |
Correct : C = 300 |
13 |
Correct |
16 ms |
768 KB |
Correct : C = 242 |
14 |
Correct |
9 ms |
768 KB |
Correct : C = 241 |
15 |
Correct |
16 ms |
768 KB |
Correct : C = 240 |
16 |
Correct |
6 ms |
768 KB |
Correct : C = 300 |
17 |
Correct |
7 ms |
640 KB |
Correct : C = 300 |
18 |
Correct |
9 ms |
768 KB |
Correct : C = 260 |
19 |
Correct |
7 ms |
768 KB |
Correct : C = 65 |
20 |
Incorrect |
9 ms |
768 KB |
Wrong |
21 |
Correct |
7 ms |
640 KB |
Correct : C = 204 |
22 |
Correct |
5 ms |
640 KB |
Correct : C = 39 |
23 |
Correct |
6 ms |
768 KB |
Correct : C = 300 |
24 |
Correct |
6 ms |
640 KB |
Correct : C = 300 |
25 |
Correct |
7 ms |
768 KB |
Correct : C = 300 |
26 |
Correct |
10 ms |
768 KB |
Correct : C = 300 |
27 |
Correct |
7 ms |
768 KB |
Correct : C = 300 |