//P7595
#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
int n, dep[N], fa[N], vis[N];
vector<short> fc[N][N];
void dfs(int x, int d){
if(!fc[x][d+1].size()){
return;
}
for(int i : fc[x][d+1]){
fa[i] = x;
}
int s = fc[x][d+1].size();
int p = rand() % s;
memset(vis, 0, sizeof(vis));
for(int i = d + 1; i <= n; ++ i){
for(int j : fc[x][i]){
vis[j] = 1;
}
}
for(int i = 0; i < s; ++ i){
if(i == p){
continue;
}
int y = fc[x][d+1][i];
printf("? 2 %d\n", y);
fflush(stdout);
int num = 0, z;
scanf("%d", &num);
for(int j = 1; j <= num; ++ j){
scanf("%d", &z);
fc[y][dep[z]].push_back(z);
vis[z] = 0;
}
}
for(int i = 1; i <= n; ++ i){
if(vis[i]){
fc[fc[x][d+1][p]][dep[i]].push_back(i);
}
}
for(int i : fc[x][d+1]){
dfs(i, d+1);
}
}
int main(){
srand(unsigned(time(NULL)));
scanf("%d", &n);
for(int i = 2; i <= n; ++ i){
printf("? 1 1 %d\n", i);
fflush(stdout);
int x;
scanf("%d", &x);
dep[i] = x;
fc[1][x].push_back(i);
}
dfs(1, 0);
putchar('!');
for(int i = 2; i <= n; ++ i){
printf(" %d", fa[i]);
}
fflush(stdout);
return 0;
}
随机化代码,WA2+MLE3,但应该不是爆空间,求助为什么会 MLE