本题出题人给出的 std 是:

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n,m,k,d[N];
signed main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i = 1,x,y;i<=m;i++)
		cin>>x>>y,d[x]++,d[y]++;
	for(int i = 1;i<=n;i++)
		if(d[i]%2==1)
			k++;
		k = k/2;
	if((m+k)%2) k++;
	cout<<k;
 	return 0;
}

它基于如下做法:

  • 题面可以抽象为一张 nn 个结点 mm 条边的无向图,我们需要加上最少的边数使其成为若干个偶数长度环的叠加(可以不是简单环)。
  • 注意到所有点度数为偶数且有偶数条边的连通图必存在欧拉回路(满足要求),基于这一事实判断即可。

然而,std 无法通过以下 hack 数据,因为它没有判断这张图是否连通:

样例输入 3

4 4
1 1
2 2
3 3
4 4

样例输出 3

0

样例答案 3

4

样例输入 4

9 9
1 2
2 3
3 1
4 5
5 6
6 4
7 8
8 9
9 7

样例输出 4

1

样例答案 4

3

因此本题原版数据不一定是正确的。

我们将在近期更新 std 和数据。

参考资料:https://www.luogu.com.cn/problem/P1636

1 条评论

  • @ 2025-1-8 10:38:40

    感谢对我们题目的检查,出题人疑似过于自信了,建议把本题与前面的题交换

    • 1

    信息

    ID
    79
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    8
    已通过
    1
    上传者