最简单的代码:
#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;
}