// ceoi16p1 - ICC
#include <bits/stdc++.h>
#include "icc.h"
using namespace std;
struct DSU{
    int n;
    vector<int> p,sz;
    DSU(){};
    DSU(int n): n(n), p(n+1, 0), sz(n+1, 1){
        for(int i=1;i<=n;i++) p[i] = i;
    }
    int find_set(int u){
        return (u == p[u] ? u : p[u] = find_set(p[u]));
    }
    void union_set(int u, int v){
        u = find_set(u);
        v = find_set(v);
        if(u == v) return;
        if(sz[u] < sz[v]) swap(u, v);
        p[v] = u;
        sz[u] += sz[v];
    }
};
void run(int N){
    DSU dsu = DSU(N);
    mt19937 rng(128379878);
    for(int eee=1;eee<N;eee++){
        int sza, szb, a[N], b[N];
        for(int j=0;j<=7;j++){
            vector<int> col(N+1, 0);
            vector<int> comp;
            for(int i=1;i<=N;i++){
                if(dsu.find_set(i) == i){
                    comp.push_back(i);
                }
            }
            shuffle(comp.begin(), comp.end(), rng);
            for(int i=0;i<comp.size();i++){
                col[comp[i]] = i >> j & 1;
            }
            sza = 0; szb = 0;
            for(int i=1;i<=N;i++){
                if(col[dsu.find_set(i)]){
                    b[szb++] = i;
                }else{
                    a[sza++] = i;
                }
            }
            if(query(sza, szb, a, b)) break;
        }
        int L = 1, R = sza;
        while(L < R){
            int mid = (L + R) / 2;
            if(query(mid, szb, a, b)) R = mid;
            else L = mid + 1;
        }
        int u = a[L-1];
        L = 1; R = szb;
        while(L < R){
            int mid = (L + R) / 2;
            if(query(sza, mid, a, b)) R = mid;
            else L = mid + 1;
        }
        int v = b[L-1];
        dsu.union_set(u, v);
        setRoad(u, v);
    }
}
| # | 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... |