Submission #1244569

#TimeUsernameProblemLanguageResultExecution timeMemory
1244569repmannICC (CEOI16_icc)C++20
0 / 100
128 ms840 KiB
#include <bits/stdc++.h> #include "icc.h" using namespace std; mt19937 rng(1); int 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 - 1;} } return a[L]; } void run(int N) { for(int i = 1; i <= N; i++) DSU[i] = {i, 1, {i}}; int edges = N - 1; while(edges--) { int num, u, v, a[N], b[N]; do { cout << "krenoh\n"; memset(D, 0, sizeof(D)); num = 0; while(num < (N >> 1)) { int node = (rng() % N) + 1; node = Find(node); if(D[node]) continue; if((num + DSU[node].num) == N) break; D[node] = 1; num += DSU[node].num; } for(int i = 1, j = 0; i <= N; i++) { if(!D[i]) continue; for(int x : DSU[i].V) {a[j++] = x; D[x] = 1;} } for(int i = 1, j = 0; i <= N; i++) { cout << D[i] << '\n'; if(!D[i]) b[j++] = i; } }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...