#include <bits/stdc++.h>
#include "icc.h"
using namespace std;
bool D[101];
struct NODE
{
int parent, num;
vector <int> V;
}DSU[101];
//inline bool query(int size_a, int size_b, int a[], int b[])
//{
// cout << "Query:\n";
// cout << size_a << '\n';
// for(int i = 0; i < size_a; i++) cout << a[i] << " \n"[i == (size_a - 1)];
// cout << size_b << '\n';
// for(int i = 0; i < size_b; i++) cout << b[i] << " \n"[i == (size_b - 1)];
// bool ans;
// cin >> ans;
// return ans;
//}
//inline void setRoad(int u, int v)
//{
// cout << "Set: " << u << ' ' << v << '\n';
// return;
//}
inline int Find(int u)
{
if(u != DSU[u].parent) return Find(DSU[u].parent);
return u;
}
inline void Union(int u, int v)
{
u = Find(u);
v = Find(v);
if(u == v) return;
if(DSU[u].num < DSU[v].num) swap(u, v);
DSU[v].parent = u;
DSU[u].num += DSU[v].num;
for(int x : DSU[v].V) DSU[u].V.push_back(x);
DSU[v].V = vector <int>();
return;
}
inline int BS(int size_a, int size_b, int a[], int b[])
{
int L = 0, R = size_a - 1, S, temp[size_a];
while(L < R)
{
S = (L + R) >> 1;
for(int i = L, j = 0; i <= S; i++) temp[j++] = a[i];
if(!query(S - L + 1, size_b, temp, b)) L = S + 1;
else R = S;
}
return a[R];
}
void run(int N)
{
for(int i = 1; i <= N; i++) DSU[i] = {i, 1, {i}};
int edges = N - 1;
while(edges--)
{
int bit = 0, num, u, v, a[N], b[N];
memset(D, 0, sizeof(D));
for(int i = 1; i <= N; i++) D[Find(i)] = 1;
do
{
num = 0;
for(int i = 1, j = 0; i <= N; i++)
{
if(!D[i]) continue;
if(i & (1 << bit))
{
num += DSU[i].num;
for(int x : DSU[i].V) a[j++] = x;
}
}
for(int i = 1, j = 0; i <= N; i++)
{
b[j++] = i;
for(int k = 0; k < num; k++) if(a[k] == i) {j--; break;}
}
bit++;
if(num == N) continue;
}while(!query(num, N - num, a, b));
a[0] = u = BS(num, N - num, a, b);
v = BS(N - num, 1, b, a);
Union(u, v);
setRoad(u, v);
}
return;
}
//int main()
//{
// int n;
// cin >> n;
// run(n);
//
// return 0;
//}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |