#include <bits/stdc++.h>
#include "icc.h"
using namespace std;
#define ll long long
#define fi first
#define se second
#define pii pair<int, int>
const int MAX = 110;
int n;
int parent[MAX];
int depth[MAX];
vector <int> v[MAX];
vector <int> groups;
int cntQuery = 0;
int find(int a) {
if (a == parent[a]) return a;
return parent[a] = find(parent[a]);
}
void spoji(int a, int b) {
setRoad(a, b);
a = find(a);
b = find(b);
if (a == b) return;
if (depth[a] >= depth[b]) {
depth[a] += depth[b];
parent[b] = a;
for (auto e : v[b]) v[a].push_back(e);
}
else {
depth[b] += depth[a];
parent[a] = b;
for (auto e : v[a]) v[b].push_back(e);
}
}
int sendQuery(vector <int> a, vector <int> b) {
if (a.empty()) return 0;
if (b.empty()) return 0;
int sza = a.size();
int szb = b.size();
int arra[sza];
int arrb[szb];
for (int i = 0; i < sza; i++) arra[i] = a[i];
for (int i = 0; i < szb; i++) arrb[i] = b[i];
return query(sza, szb, arra, arrb);
}
void bs(vector <int> a, vector <int> b) {
if (a.size() == 1) {
if (b.size() == 1) {
spoji(a[0], b[0]);
}
else {
bs(b, a);
}
return;
}
vector <int> v, v2;
for (int i = 0; i < a.size() / 2; i++) v.push_back(a[i]);
for (int i = a.size() / 2; i < a.size(); i++) v2.push_back(a[i]);
if (sendQuery(v, b)) bs(v, b);
else bs(v2, b);
}
void nadiUnutarGrupe(vector <int> g, vector <int> g2) {
vector <int> a, b;
for (int i = 1; i <= n; i++) {
for (auto e : g) if (find(i) == e) a.push_back(i);
for (auto e : g2) if (find(i) == e) b.push_back(i);
}
bs(a, b);
}
void solve() {
vector <int> g, g2;
int bit = 0;
while (true) {
g.clear(), g2.clear();
for (int i = 0; i < (int)groups.size(); i++) {
if (i & (1 << bit)) g2.push_back(groups[i]);
else g.push_back(groups[i]);
}
if (sendQuery(g, g2)) break;
bit++;
if (bit > 20) {
cout << "penis\n";
return;
}
}
nadiUnutarGrupe(g, g2);
}
void run(int N) {
n = N;
for (int i = 1; i <= n; i++) {
parent[i] = i;
depth[i] = 1;
v[i].push_back(i);
}
for (int i = 1; i < n; i++) {
groups.clear();
for (int j = 1; j <= n; j++) if (find(j) == j) groups.push_back(j);
solve();
}
}
# | 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... |