Submission #116675

#TimeUsernameProblemLanguageResultExecution timeMemory
116675IOrtroiiiICC (CEOI16_icc)C++14
90 / 100
145 ms632 KiB
#include <bits/stdc++.h> #include "icc.h" using namespace std; const int N = 105; int qa[N], qb[N]; int query(vector<int> a, vector<int> b) { int sza = a.size(), szb = b.size(); for (int i = 0; i < sza; ++i) { qa[i] = a[i]; } for (int i = 0; i < szb; ++i) { qb[i] = b[i]; } return query(sza, szb, qa, qb); } int fnd(int l, int r, vector<int> &from, vector<int> &to) { if (l == r) { return from[l]; } int md = (l + r) >> 1; vector<int> ll; for (int i = l; i <= md; ++i) { ll.push_back(from[i]); } if (query(ll, to)) { return fnd(l, md, from, to); } else { return fnd(md + 1, r, from, to); } } int p[N]; vector<int> comp[N]; int getp(int u) { if (p[u] == u) { return u; } else { return p[u] = getp(p[u]); } } void mrg(int u, int v) { u = getp(u), v = getp(v); if (comp[u].size() < comp[v].size()) { swap(u, v); } p[v] = u; for (int w : comp[v]) { comp[u].push_back(w); } } void modify(vector<int> l, vector<int> r) { int u = fnd(0, l.size() - 1, l, r); int v = fnd(0, r.size() - 1, r, l); mrg(u, v); setRoad(u, v); } int n; void solve() { vector<int> roots; for (int i = 1; i <= n; ++i) { if (p[i] == i) { roots.push_back(i); } } for (int i = 0; (1 << i) < roots.size(); ++i) { vector<int> l, r; for (int j = 0; j < roots.size(); ++j) { if (j & (1 << i)) { for (int v : comp[roots[j]]) { l.push_back(v); } } else { for (int v : comp[roots[j]]) { r.push_back(v); } } } if (query(l, r)) { modify(l, r); return; } } } void run(int n) { ::n = n; for (int i = 1; i <= n; ++i) { p[i] = i; comp[i].push_back(i); } for (int i = 0; i < n - 1; ++i) { solve(); } }

Compilation message (stderr)

icc.cpp: In function 'void solve()':
icc.cpp:72:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (int i = 0; (1 << i) < roots.size(); ++i) {
                    ~~~~~~~~~^~~~~~~~~~~~~~
icc.cpp:74:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for (int j = 0; j < roots.size(); ++j) {
                       ~~^~~~~~~~~~~~~~
#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...