#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int parent[157];
int sz[157];
int check[157][157];
vector<int> mp;
int findpar(int x){
if(parent[x]==x) return x;
return x=findpar(parent[x]);
}
signed main(){
int n; cin >> n;
for(int i=1;i<=n;++i) parent[i]=i,sz[i]=1;
cout << n << " ";
for(int i=1;i<=n;++i) cout << i << " ";
fflush(stdout);
int c; cin >> c;
int cnt;
for(int i=1;i<=n;++i){
if(cnt==c) break;
for(int j=i+1;j<=n;++j){
if(findpar(i)==findpar(j)) continue;
if(check[findpar(i)][findpar(j)]) continue;
cout << 2 << " " << i << " " << j << endl;
fflush(stdout);
int tmp; cin >> tmp;
check[findpar(i)][findpar(j)]=check[findpar(j)][findpar(i)]=true;
if(tmp==1){
parent[findpar(i)]=findpar(j);
sz[findpar(j)]=0;
sz[findpar(i)]+=sz[findpar(j)];
}
cnt=0;
for(int i=1;i<=n;++i){
if(sz[i]) ++cnt;
}
if(cnt==c) break;
check[findpar(i)][findpar(j)]=check[findpar(j)][findpar(i)]=true;
}
}
cout << 0 << " ";
for(int i=1;i<=n;++i){
if(find(mp.begin(),mp.end(),findpar(i))==mp.end()){
mp.push_back(findpar(i));
}
}
for(int i=1;i<=n;++i){
cout << find(mp.begin(),mp.end(),findpar(i))-mp.begin()+1 << " ";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |