暴力求调
查看原帖
暴力求调
100091
GaryH楼主2021/5/11 17:47

n方暴力,一直WA,求调试QAQ

#include<bits/stdc++.h>

#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define edg(i,v,u) for(int i=head[u],v=e[i].to;i;i=e[i].nxt,v=e[i].to)

using namespace std;

inline int read(){
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9')f=ch=='-'?-1:1,ch=getchar();
	while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
	return x*f;
}

const int maxn=2e3+10;

int n;

int fa[maxn];
int siz[maxn];
int dis[maxn][maxn];

vector < int > dn[maxn];

inline void ask1(int u,int v){int d;
	cout<<"? 1 "<<u<<' '<<v<<endl;
	fflush(stdout);
	cin>>d;
	dis[u][v]=dis[v][u]=d;
}

inline void ask2(int u){
	cout<<"? 2 "<<u<<endl;
	fflush(stdout);
	cin>>siz[u];
	rep(i,1,siz[u]){int v;
		cin>>v;
		if(v!=u)dn[u].push_back(v);
	}
}

inline void forty(){
	rep(i,1,n)ask2(i);
	rep(i,1,n){
		rep(j,0,siz[i]-2){
			if(!dis[i][dn[i][j]])ask1(i,dn[i][j]);
			if(dis[i][dn[i][j]]==1){
				fa[dn[i][j]]=i;
			}
		}
	}
	cout<<"! ";
	rep(i,1,n)if(!fa[i])cout<<i<<' ';else cout<<fa[i]<<' ';
	cout<<endl;
	fflush(stdout);
}

int main(){
	cin>>n;
	if(n<=500)forty();
	return 0;
}
2021/5/11 17:47
加载中...