空间复杂度??
查看原帖
空间复杂度??
390770
D2T1xubiaoshi楼主2023/11/14 17:19
//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

2023/11/14 17:19
加载中...