luogu P1053 篝火晚会

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

const int N=50009;
int n,a[N],b[N],c[N],bin[N*2],Bin[N*2];

void init()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
		scanf("%d %d",&a[i],&b[i]);
}

int C(int x,int y)
{
	return a[x]==y||b[x]==y;
}

void work()
{
	c[1]=1,c[2]=a[1];
	if(!C(c[2],1)){ puts("-1");return; }
	for (int i=2;i<n;i++)
	{
		if(a[c[i]]==c[i-1])
			c[i+1]=b[c[i]];
		else
			c[i+1]=a[c[i]];
		if(!C(c[i+1],c[i])){ puts("-1");return; }
	}
	if(!C(c[1],c[n])){ puts("-1");return; }
	for (int i=1;i<=n;i++)
		bin[(i-c[i]+n)%n]++,Bin[(i-c[n-i+1]+n)%n]++;
	int Max=0;
	for (int i=1;i<=n;i++)
		Max=max(Max,max(bin[(i-c[i]+n)%n],Bin[(i-c[n-i+1]+n)%n]));
	printf("%d
",n-Max);
}

int main()
{
	init();
	work();
	return 0;
}
由于博主比较菜,所以有很多东西待学习,大部分文章会持续更新,另外如果有出错或者不周之处,欢迎大家在评论中指出!
原文地址:https://www.cnblogs.com/With-penguin/p/12839454.html