#include "icc.h"
#include<bits/stdc++.h>
using namespace std;
const int mxN = 105;
struct DSU{
vector<int>par;
DSU(int n){
par.assign(n + 1, -1);
}
int Find(int u){
if(par[u] < 0)return u;
return par[u] = Find(par[u]);
}
void Union(int u, int v){
u = Find(u);
v = Find(v);
if(u == v)return;
if(par[u] < par[v])swap(u, v);
par[u] += par[v];
par[v] = u;
}
bool isConnected(int u, int v){
return Find(u) == Find(v);
}
};
int Query(int sza, int szb, vector<int>a, vector<int>b){
int A[sza], B[szb];
for(int i = 0;i < sza;++i){
A[i] = a[i];
}
for(int i = 0;i < szb;++i){
B[i] = b[i];
}
int num = query(sza, szb, A, B);
return num;
}
void run(int n){
srand(time(0));
DSU dsu(n);
for(int k = 0;k < n - 1;++k){
int node = -1, node2 = -1;
for(int i = 1;i <= n;++i){
vector<int>a = {i}, b;
for(int j = i + 1;j <= n;++j){
if(dsu.isConnected(i, j))continue;
b.push_back(j);
}
if(Query(a.size(), b.size(), a, b)){
node = i;
break;
}
}
for(int i = 1;i <= n;++i){
if(dsu.isConnected(node, i))continue;
vector<int>a = {node}, temp = {i};
if(Query(a.size(), temp.size(), a, temp)){
node2 = i;
break;
}
}
setRoad(node, node2);
dsu.Union(node, node2);
}
}
# | 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... |