记录编号 463780 评测结果 AAAAAAAAAA
题目名称 [NOIP 2005]篝火晚会 最终得分 100
用户昵称 GravatarTARDIS 是否通过 通过
代码语言 C++ 运行时间 0.129 s
提交时间 2017-10-24 19:27:36 内存使用 3.24 MiB
显示代码纯文本
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=100010;
int val[maxn],cnt[maxn];
int pos[maxn],l[maxn],r[maxn];
int beside[maxn][2];
int n,m,k,ans;

void beg(){
	freopen("fire.in","r",stdin);
	freopen("fire.out","w",stdout);
}

int main(){
	beg();
	scanf("%d",&n);
	for (int i=1;i<=n;i++){
		for (int j=0;j<2;j++){
			scanf("%d",&beside[i][j]);
			cnt[beside[i][j]]++;
		}
	}
	for (int i=1;i<=n;i++){
		if (cnt[i]!=2){
			puts("-1");
			return 0;
		}
	}
	l[1]=beside[1][0];
	r[1]=beside[1][1];
	int pos_now=1,cnt_temp=0;
	do{
		int y=r[pos_now];
		l[y]=pos_now;
		if (beside[y][0]==pos_now) r[y]=beside[y][1];else r[y]=beside[y][0];
		pos_now=y;
		cnt_temp++;
	}while (pos_now!=1);
	if (cnt_temp!=n){
		printf("-1");
		return 0;
	}
	int s[maxn];memset(s,0,sizeof(s));
	for (int i=1,p=1;i<=n;i++,p=r[p]){
		s[(i-p+n)%n]++;
		ans=max(s[(i-p+n)%n],ans);
	}
	memset(s,0,sizeof(s));
	for (int i=1,p=1;i<=n;i++,p=l[p]){
		s[(i-p+n)%n]++;
		ans=max(ans,s[(i-p+n)%n]);
	}
	printf("%d",n-ans);
	return 0;
}