Submission #1112633

#TimeUsernameProblemLanguageResultExecution timeMemory
1112633Ghulam_JunaidICC (CEOI16_icc)C++17
0 / 100
1 ms336 KiB
#include <bits/stdc++.h> #include "icc.h" // #include "grader.cpp" using namespace std; #define all(vv) vv.begin(), vv.end() mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int N = 105; int n, par[N]; vector<int> S[N]; int root(int v){ return (par[v] == -1 ? v : par[v] = root(par[v])); } void merge(int u, int v){ if ((u = root(u)) == (v = root(v))) return ; if (S[u].size() > S[v].size()) swap(u, v); for (int x : S[u]){ par[x] = v; S[v].push_back(x); } S[u].clear(); } void run(int nn){ n = nn; for (int i = 1; i <= n; i ++) par[i] = -1, S[i] = {i}; for (int edge = 0; edge < n - 1; edge ++){ vector<int> roots[2], vec[2]; while (1){ set<int> st; for (int v = 1; v <= n; v ++) st.insert(root(v)); vector<int> all_roots; for (int v : st) all_roots.push_back(v); for (int j : {0, 1}) roots[j].clear(), vec[j].clear(); for (int x : all_roots){ int id = rng() % 2; roots[id].push_back(x); for (int v : S[x]) vec[id].push_back(v); } shuffle(all_roots.begin(), all_roots.end(), rng); for (int i = 0; i < all_roots.size(); i ++){ int id = (i >= all_roots.size() / 2); roots[id].push_back(all_roots[i]); for (int v : S[all_roots[i]]) vec[id].push_back(v); } int a[(int)vec[0].size()], b[(int)vec[1].size()]; copy(all(vec[0]), a), copy(all(vec[1]), b); int res = query((int)vec[0].size(), (int)vec[1].size(), a, b); if (res) break; } for (int j : {0, 1}){ int l = -1; int r = roots[j].size() - 1; while (r - l > 1){ int mid = (l + r) / 2; vec[j].clear(); for (int i = 0; i <= mid; i ++) for (int v : S[roots[j][i]]) vec[j].push_back(v); int a[(int)vec[0].size()], b[(int)vec[1].size()]; copy(all(vec[0]), a), copy(all(vec[1]), b); int res = query((int)vec[0].size(), (int)vec[1].size(), a, b); if (res) r = mid; else l = mid; vec[j].clear(); for (int i = l + 1; i <= r; i ++) for (int v : S[roots[j][i]]) vec[j].push_back(v); } int imp = roots[j][r]; roots[j] = {imp}; } vector<int> tmp[2] = {vec[0], vec[1]}; for (int j : {0, 1}){ int l = -1; int r = vec[j].size() - 1; while (r - l > 1){ int mid = (l + r) / 2; tmp[j].clear(); for (int i = 0; i <= mid; i ++) tmp[j].push_back(vec[j][i]); int a[(int)tmp[0].size()], b[(int)tmp[1].size()]; copy(all(tmp[0]), a), copy(all(tmp[1]), b); int res = query((int)tmp[0].size(), (int)tmp[1].size(), a, b); if (res) r = mid; else l = mid; tmp[j].clear(); for (int i = l + 1; i <= r; i ++) tmp[j].push_back(vec[j][i]); } vec[j] = tmp[j]; } setRoad(vec[0][0], vec[1][0]); merge(vec[0][0], vec[1][0]); } }

Compilation message (stderr)

icc.cpp: In function 'void run(int)':
icc.cpp:58:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |             for (int i = 0; i < all_roots.size(); i ++){
      |                             ~~^~~~~~~~~~~~~~~~~~
icc.cpp:59:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |                 int id = (i >= all_roots.size() / 2);
      |                           ~~^~~~~~~~~~~~~~~~~~~~~~~
#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...