Submission #1244770

#TimeUsernameProblemLanguageResultExecution timeMemory
1244770repmannICC (CEOI16_icc)C++20
0 / 100
93 ms584 KiB
#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; bool flag = 0; for(int x : DSU[i].V) flag |= bool(x & (1 << bit)); if(!flag) continue; 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 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...