[AGC004F] Namori

这篇博客探讨了一张N个点M条边的连通图,如何通过颜色反转操作将所有点变为黑色。文章介绍了针对树、奇环、偶环三种情况的解题策略,并提供了最少操作次数的计算方法。对于树形结构,关键在于球入洞问题;奇环可以通过一次操作调整颜色平衡;偶环则需要寻找中位数策略。最后,博主给出了完整的代码实现。
摘要由CSDN通过智能技术生成

Description

现在给你一张N个点M条边的连通图,我们保证N−1≤M≤N,且无重边和自环。

每一个点都有一种颜色,非黑即白。初始时,所有点都是白色的。

“全”想通过执行若干次某种操作的方式,来将所有的点变成黑色。操作方式如下:

选择一对颜色相同的相邻的节点(存在边直接连接彼此),将它们的颜色反转。即若原来都是白色,则都变成黑色,反之亦然。

现在“全”想知道,他能否通过执行这种操作以达到目的。如果可以,他还希望步数尽可能的少。

Input

第一行有两个正整数N和M(2≤N≤105,N−1≤M≤N)

接下来M行,每行2个正整数a和b(1≤a,b≤N),表示每条边连接的两个点。

Output

如果存在操作方案使得“全”能达到目的,请输出最少操作次数。

否则,请输出−1

题解:

这里

分三类:树,奇环,偶环

1.树

我们可以吧两个相邻的两个颜色相同的点翻转转化为,我们把原树二分图染色,把两个相邻的两个不同颜色的点交换。那我们的目标就是把所有黑点变成白点,白点变为黑点

我们可以看做一个球入洞的问题,白点上都有一个球,黑点上都有一个洞。我们把每个球都放进一个洞里,问最小要移多少次才能使全部球都入洞。

那么方案可行的条件是球和洞的数量相等。

那么我们把白点权值设为1,黑点为-1,那么答案就为

isumi ∑ i s u m i

sum

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值