【五校联考3day2】A

这题考场考虑不太全(但相比于60,其它90分的人,还是很全的(* ̄︶ ̄))
long long我是开了的,然后后面的特判我也是加了的,可是竟然打错了?!!
其实这题不需要打的像我这样麻烦:
设a[i]表示i点还需连接的边数
ans表示sigma(a[i])
max表示max(a[i])
如果max>ans/2,就说明全部连项那个最大值即可。
否则就输出ans/2。
只要判断一下
上标:

#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
int n,m,K,a[100010],now=0;
ll ans=0;

inline int read()
{
	int x=0; char c=getchar();
	while (c<'0' || c>'9') c=getchar();
	while (c>='0' && c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return x;
}

int main()
{
	freopen("A.in","r",stdin);
	freopen("A.out","w",stdout);
	n=read(),m=read(),K=read();
	for (int i=1;i<=m;i++)
		a[read()]++,a[read()]++;
	for (int i=1;i<=n;i++)
	{
		a[i]=max(0,K-a[i]);
		ans+=min(now,a[i]);
		now=abs(now-a[i]);
	}
	if (ans>=(now>>1)) printf("%lld
",ans+(now+1>>1));
	else printf("%lld
",ans+now);//这里我考场没加ans。。。
	return 0;
}
转载需注明出处。
原文地址:https://www.cnblogs.com/jz929/p/11817617.html