```
#include<bits/stdc++.h>
int goal[50010];
int n;
int pop[50010][2];
int ans[50010];
int read()
{
int ans=0;
char ch=getchar();
while(ch>'9'||ch<'0')ch=getchar();
while(ch<='9'&&ch>='0')
{
ans=ans*10+ch-'0';
ch=getchar();
}
return ans;
}
int set_what(int x,int m,int y,int z)//这个数是x,存放在goal[m],是从y位置拓展来的,再往左(-1)右(1)拓展;
{
if(x==1)
{
goal[1]=1;
goal[2]=pop[x][0];
goal[n]=pop[x][1];
if(!set_what(goal[2],2,1,1)||!set_what(goal[n],n,1,-1))return 0;
else return 1;
}
else if(pop[x][0]==goal[y]||pop[x][1]==goal[y])
{
if(pop[x][0]==goal[y])
{
if(goal[m+z]!=0)
{
if(goal[m+z]!=pop[x][1])
{
return 0;
}
}
if(goal[m+z]==0)
{
goal[m+z]=pop[x][1];
if(!set_what(goal[m+z],m+z,m,z))
{
return 0;
}
}
}
else if(pop[x][1]==goal[y])
{
if(goal[m+z]!=0)
{
if(goal[m+z]!=pop[x][0])
{
return 0;
}
}
if(goal[m+z]==0)
{
goal[m+z]=pop[x][0];
if(!set_what(goal[m+z],m+z,m,z))
{
return 0;
}
}
}
}
else if(pop[x][0]!=goal[y]&&pop[x][1]!=goal[y])
return 0;
return 1;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
for(int j=0;j<=1;j++)
pop[i][j]=read();
if(set_what(1,1,1,1)==0)printf("-1");
else
{
int what=0;
for(int i=1;i<=n;i++)
{
if(goal[i]-i<0)
{
ans[goal[i]-i+n]++;
what=what>ans[goal[i]-i+n]?what:ans[goal[i]-i+n];
}
else
{
ans[goal[i]-i]++;
what=ans[goal[i]-i]>what?ans[goal[i]-i]:what;
}
}
memset(ans,0,sizeof(ans));
for(int i=n;i>=1;i--)
{
if(goal[i]-i<0)
{
ans[goal[i]-i+n]++;
what=what>ans[goal[i]-i+n]?what:ans[goal[i]-i+n];
}
else
{
ans[goal[i]-i]++;
what=ans[goal[i]-i]>what?ans[goal[i]-i]:what;
}
}
printf("%d",n-what);
}
}
```
by _Decade_ @ 2018-08-25 18:35:43
新人发帖,不好意思。。。
by _Decade_ @ 2018-08-25 18:36:04
不知是不是妹子,溜了溜了
by kl膜法59改 @ 2018-08-25 19:01:36