#include <iostream>
#include <vector>
#include <set>
#include "icc.h"
using namespace std;
set<int> rt;
vector<int> Vec[105];
int Root[105], seen[105][105];
vector<int> get(vector<int> a){
vector<int> ans;
for (int i : a)
for (int j : Vec[i])
ans.push_back(j);
return ans;
}
bool Query(vector<int> a,vector<int> b){
int n1 = a.size(), n2 = b.size();
int A[n1], B[n2];
for (int i=0;i<n1;i++)
A[i] = a[i];
for (int i=0;i<n2;i++)
B[i] = b[i];
return query(n1, n2, A, B);
}
void solve2(vector<int> lft, vector<int> rgt){
lft = get(lft);
int l = 0, r = lft.size();
while (l + 1 < r){
int m = (l + r) / 2;
vector<int> vec2;
for (int i = l;i < m;i++)
vec2.push_back(lft[i]);
if (Query(vec2, get(rgt)))
r = m;
else
l = m;
}
vector<int> v;
for (int i : rgt)
if (!seen[Root[lft[l]]][i])
v.push_back(i);
rgt = get(v);
int l2 = 0, r2 = rgt.size();
while (l2 + 1 < r2){
int m2 = (l2 + r2) / 2;
vector<int> vec2;
for (int i=l2;i<m2;i++)
vec2.push_back(rgt[i]);
if (Query({lft[l]}, vec2))
r2 = m2;
else
l2 = m2;
}
int A = lft[l], B = rgt[l2];
setRoad(A, B);
A = Root[A], B = Root[B];
for (int i : Vec[B])
Root[i] = A, Vec[A].push_back(i);
rt.erase(B);
}
void solve(int n){
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
seen[i][j] = 0;
vector<int> V;
for (int i : rt)
V.push_back(i);
for (int p=(1<<20);p >= 1;p /= 2){
if (p >= V.size())
continue;
vector<int> lft, rgt;
for (int j=0, l = 0;j<V.size();j++){
if (j % p == 0)
l = 1 - l;
if (l)
lft.push_back(V[j]);
else
rgt.push_back(V[j]);
}
if (Query(get(lft), get(rgt))){
solve2(lft, rgt);
return ;
}
for (int i : lft)
for (int j : rgt)
seen[i][j] = seen[j][i] = 1;
}
}
void run(int n){
for (int i=1;i<=n;i++){
Root[i] = i;
Vec[i].push_back(i);
rt.insert(i);
}
while (n--)
solve(n);
}
// int main(){
// }
Compilation message
icc.cpp: In function 'void solve(int)':
icc.cpp:85:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
85 | if (p >= V.size())
| ~~^~~~~~~~~~~
icc.cpp:88:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
88 | for (int j=0, l = 0;j<V.size();j++){
| ~^~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
3 ms |
592 KB |
Wrong road! |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
7 ms |
592 KB |
Wrong road! |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
592 KB |
Wrong road! |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
5 ms |
956 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
4 ms |
848 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
5 ms |
848 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |