我太难了,70分
查看原帖
我太难了,70分
658786
STUDENT00楼主2022/10/17 21:03

最简单的代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[50010][2],v[50010],ans=1e9;
void f(){
	for(int i=1;i<=n;i++){
		int s=0;
		for(int j=1;j<=n;j++){
			if(v[j]!=j) s++;
		}
		if(s<ans) ans=s;
		int t=v[1];
		for(int i=1;i<n;i++) v[i]=v[i+1];
		v[n]=t;
		if(clock()*1.0/CLOCKS_PER_SEC>0.95) return;
	}
	return;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d%d",&a[i][0],&a[i][1]);
	for(int i=1;i<=n;i++){
		if(a[a[i][0]][0]!=i&&a[a[i][0]][1]!=i||a[a[i][1]][0]!=i&&a[a[i][1]][1]!=i){
			printf("-1");
			return 0;
		}
	}
	int k=3,x=1,y=a[1][0];
	v[1]=x;
	v[2]=y;
	while(k<=n){
		if(a[y][0]==x){
			v[k]=a[y][1];
			x=y;
			y=v[k];
		}else{
			v[k]=a[y][0];
			x=y;
			y=v[k];
		}
		k++;
	}
	f();
	printf("%d",ans);
	return 0;
}
2022/10/17 21:03
加载中...