Submission #410307

#TimeUsernameProblemLanguageResultExecution timeMemory
410307BlagojceICC (CEOI16_icc)C++11
90 / 100
196 ms656 KiB
#include <bits/stdc++.h> #define fr(i, n, m) for(int i = (n); i < (m); i ++) #define st first #define nd second #define all(v) begin(v), end(v) #define pq priority_queue #define pb push_back using namespace std; typedef long long ll; typedef pair<int,int> pii; const ll inf = 1e18; const ll mod = 1e9+7; const int mxn = 2e2; mt19937 _rand(time(NULL)); #include "icc.h" int link[mxn]; int siz[mxn]; int n; int findx(int x){ if(x == link[x]) return x; link[x] = findx(link[x]); return link[x]; } void unite(int a, int b){ a = findx(a); b = findx(b); if(a == b) return; if(siz[a] < siz[b]) swap(a, b); siz[a] += siz[b]; link[b] = a; } vector<int> unzip(vector<int> v){ fr(i, 0, n){ if(find(all(v), findx(i)) != v.end()) v.pb(i); } return v; } int QUERY(vector<int> v1, vector<int> v2){ int N = (int)v1.size(); int M = (int)v2.size(); int a1[N]; fr(i, 0, N) a1[i] = v1[i]+1; int a2[M]; fr(i, 0, M) a2[i] = v2[i]+1; return query(N, M, a1, a2); } void separation(vector<int> v, vector<int> &a, vector<int> &b){ random_shuffle(all(v)); for(int i = 0; (1<<i) < (int)v.size(); i ++){ a.clear(); b.clear(); fr(j, 0, (int)v.size()){ if(j&(1<<i)){ a.pb(v[j]); } else{ b.pb(v[j]); } } vector<int> ua = unzip(a); vector<int> ub = unzip(b); if(QUERY(ua, ub)) break; } } int findvertex(vector<int> v, vector<int> stat){ if((int)v.size() == 1){ return v[0]; } vector<int> lh; vector<int> rh; fr(i, 0, (int)v.size()/2){ lh.pb(v[i]); } fr(i,(int)v.size()/2, (int)v.size()){ rh.pb(v[i]); } if(QUERY(lh, stat)){ return findvertex(lh, stat); } else{ return findvertex(rh, stat); } } void run(int N){ n = N; fr(i, 0, n) link[i] = i, siz[i] = 1; fr(i, 0, n-1){ vector<int> v; fr(p, 0, n){ v.pb(findx(p)); } sort(all(v)); v.erase(unique(all(v)),v.end()); vector<int> v1; vector<int> v2; separation(v, v1, v2); v1 = unzip(v1); v2 = unzip(v2); int U = findvertex(v1, v2); int V = findvertex(v2,{U}); setRoad(U+1, V+1); unite(U, V); } }
#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...