Submission #1289811

#TimeUsernameProblemLanguageResultExecution timeMemory
1289811julia_08ICC (CEOI16_icc)C++20
100 / 100
72 ms620 KiB
#include <bits/stdc++.h> #include "icc.h" using namespace std; // void setRoad(int a, int b); // int query(int sz_a, int sz_b, int a[], int b[]); const int MAXN = 110; const int LOG = 7; int a[LOG][MAXN], b[LOG][MAXN]; int sz_a[LOG], sz_b[LOG]; int pai[MAXN], comp[MAXN]; int cur_A[MAXN], cur_B[MAXN]; int bit; int get(int v){ if(v == pai[v]) return v; return pai[v] = get(pai[v]); } void dsu_union(int a, int b){ a = get(a); b = get(b); pai[a] = b; } bool check_A(int m){ int cur_sz = m + 1; for(int i=0; i<cur_sz; i++) cur_A[i] = a[bit][i]; for(int i=0; i<sz_b[bit]; i++) cur_B[i] = b[bit][i]; return query(cur_sz, sz_b[bit], cur_A, cur_B); } int bs_A(){ int l = 0, r = sz_a[bit]; while(l < r){ int m = l + (r - l) / 2; if(check_A(m)) r = m; else l = m + 1; } return r; } bool check_B(int m){ int cur_sz = m + 1; for(int i=0; i<sz_a[bit]; i++) cur_A[i] = a[bit][i]; for(int i=0; i<cur_sz; i++) cur_B[i] = b[bit][i]; return query(sz_a[bit], cur_sz, cur_A, cur_B); } int bs_B(){ int l = 0, r = sz_b[bit] - 1; while(l < r){ int m = l + (r - l) / 2; if(check_B(m)) r = m; else l = m + 1; } return r; } void solve(int n){ int cnt = 0; for(int i=1; i<=n; i++) if(i == get(i)) comp[i] = cnt++; int log = __lg(cnt) + 1; for(int i=0; i<log; i++){ sz_a[i] = sz_b[i] = 0; for(int j=1; j<=n; j++){ if(comp[get(j)] & (1 << i)){ a[i][sz_a[i]++] = j; } else b[i][sz_b[i]++] = j; } } bit = -1; for(int i=0; i<log; i++){ if(query(sz_a[i], sz_b[i], a[i], b[i])){ bit = i; break; } } int pos_a = bs_A(), pos_b = bs_B(); setRoad(a[bit][pos_a], b[bit][pos_b]); dsu_union(a[bit][pos_a], b[bit][pos_b]); } void run(int n){ for(int i=1; i<=n; i++) pai[i] = i; for(int i=0; i<(n - 1); i++) solve(n); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...