#include <bits/stdc++.h>
#include "icc.h"
using namespace std;
typedef pair<int, int> pii;
#define fi first
#define se second
#define mp make_pair
int ask(vector<int> ta, vector<int> tb){
int n = ta.size();
int m = tb.size();
int f1[n];
int f2[m];
for(int i = 0 ; i < n; i ++ )
f1[i]=ta[i];
for(int i = 0 ; i < m; i ++ )
f2[i]=tb[i];
return query(n, m, f1, f2);
}
const int MAXN = 105;
int par[MAXN];
int sz[MAXN];
int fin(int x){
if(x==par[x])
return x;
return par[x]=fin(par[x]);
}
void unite(int a, int b){
a=fin(a);
b=fin(b);
if(a==b)
return;
if(sz[a]>sz[b])swap(a,b);
par[a]=b;
sz[b]+=sz[a];
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
void run(int N){
for(int i = 1 ; i <= N ; i ++ )
par[i]=i,sz[i]=1;
int i1, i2;
int qs = 0;
int xi, yi;
int sz;
for(int i = 0 ; i < N - 1; i ++ ){
vector<vector<int>> G(N + 1);
for(int j = 1; j <= N; j ++ ){
G[fin(j)].push_back(j);
}
vector<vector<int>> nw;
for(int j = 1; j <= N; j ++ ){
if(!G[j].empty())
nw.push_back(G[j]);
}
sz = nw.size();
vector<int> lis1, lis2;
for(int lg = 8; lg >= 0 ; lg -- ){
if((1 << lg) >= nw.size()) continue;
vector<int> pi, qi;
for(int j = 0 ; j < nw.size(); j ++ ){
if((j & (1 << lg))){
for(auto x : nw[j]) pi.push_back(x);
}
else{
for(auto x : nw[j]) qi.push_back(x);
}
}
if(pi.empty() || qi.empty()) continue;
if(ask(pi, qi)){
lis1 = pi;
lis2 = qi;
break;
}
}
int l = 0, r = lis1.size() - 1;
int mid;
while(l < r){
mid = (l + r ) / 2;
vector<int> fsh;
for(int j = 0 ; j <= mid; j ++){
fsh.push_back(lis1[j]);
}
if(ask(fsh,lis2))
r = mid;
else
l = mid + 1;
}
i1 = lis1[l];
l = 0, r = lis2.size() - 1;
while(l < r){
mid = (l + r) / 2;
vector<int> fsh;
for(int j = 0 ; j <= mid ; j ++ ){
fsh.push_back(lis2[j]);
}
if(ask(lis1,fsh)){
r = mid;
}
else{
l = mid + 1;
}
}
i2 = lis2[l];
setRoad(i1, i2);
unite(i1,i2);
}
}
Compilation message
icc.cpp: In function 'void run(int)':
icc.cpp:66:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if((1 << lg) >= nw.size()) continue;
~~~~~~~~~~^~~~~~~~~~~~
icc.cpp:68:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int j = 0 ; j < nw.size(); j ++ ){
~~^~~~~~~~~~~
icc.cpp:50:9: warning: unused variable 'qs' [-Wunused-variable]
int qs = 0;
^~
icc.cpp:51:9: warning: unused variable 'xi' [-Wunused-variable]
int xi, yi;
^~
icc.cpp:51:13: warning: unused variable 'yi' [-Wunused-variable]
int xi, yi;
^~
icc.cpp:52:9: warning: variable 'sz' set but not used [-Wunused-but-set-variable]
int sz;
^~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
512 KB |
Ok! 104 queries used. |
2 |
Correct |
7 ms |
512 KB |
Ok! 97 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
42 ms |
512 KB |
Ok! 556 queries used. |
2 |
Correct |
57 ms |
576 KB |
Ok! 636 queries used. |
3 |
Correct |
58 ms |
576 KB |
Ok! 627 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
137 ms |
580 KB |
Ok! 1315 queries used. |
2 |
Correct |
148 ms |
576 KB |
Ok! 1579 queries used. |
3 |
Correct |
148 ms |
512 KB |
Ok! 1526 queries used. |
4 |
Correct |
144 ms |
512 KB |
Ok! 1496 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
142 ms |
512 KB |
Ok! 1473 queries used. |
2 |
Correct |
165 ms |
580 KB |
Ok! 1503 queries used. |
3 |
Correct |
143 ms |
512 KB |
Ok! 1513 queries used. |
4 |
Correct |
129 ms |
512 KB |
Ok! 1378 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
144 ms |
512 KB |
Ok! 1507 queries used. |
2 |
Correct |
146 ms |
580 KB |
Ok! 1505 queries used. |
3 |
Correct |
154 ms |
620 KB |
Ok! 1566 queries used. |
4 |
Correct |
140 ms |
512 KB |
Ok! 1529 queries used. |
5 |
Correct |
140 ms |
580 KB |
Ok! 1416 queries used. |
6 |
Correct |
165 ms |
632 KB |
Ok! 1572 queries used. |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
170 ms |
512 KB |
Ok! 1543 queries used. |
2 |
Correct |
146 ms |
488 KB |
Ok! 1500 queries used. |