#P16228. [Ceoi2026]Flower Cutting修剪花卉

[Ceoi2026]Flower Cutting修剪花卉

题目描述

CEOI 的社区花园里种着一些特殊的花,它们的根会彼此缠绕。

若两朵花 aabb 的根彼此缠绕,则称它们是相连的;否则称它们是不相连的

根系按照下面的规则生长:

aabb 是两朵当前不相连的花。若存在另外两朵花 ccdd,使得 aabb 都分别与 ccdd 相连,那么 aabb 之间的根会重新长出,从而使 aabb 变为相连。

花园已经生长了足够长的时间,因此所有能够按照上述规则长出的根都已经长出。换句话说,若两朵花 aabb 同时与另外两朵花 ccdd 相连,则保证 aabb 也相连。

现在需要把整座花园挖出并搬到下一届 CEOI 的举办地。为了简化搬运工作,你希望剪断尽可能多的根,但又要求在搬运完成后,花朵能够仅依靠上述生长规则恢复到原来的连接状态。

生长过程可以执行任意多轮。

请计算最多可以剪断多少对当前相连的花。

输入格式

第一行包含两个整数 n,mn,m,分别表示花的数量以及当前相连的花对数量。

接下来 mm 行,每行包含两个整数 ai,bia_i,b_i,表示花 aia_i 与花 bib_i 相连。

花的编号为 1,2,,n1,2,\ldots,n

保证输入给出的连接状态已经满足题目中的生长规则,即不存在仍可继续长出的连接。

输出格式

输出一个整数,表示最多可以剪断的连接数量。

数据范围

  • 1n10001\le n\le 1000
  • 1m1051\le m\le 10^5

子任务

子任务 分值 附加限制
1 20 n10n\le 10m20m\le 20
2 14 m=n(n1)2m=\dfrac{n(n-1)}2
3 15 每朵花最多与另外 77 朵花相连
4 n50n\le 50m1000m\le 1000
5 36 无附加限制

样例

输入

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

输出

2

样例解释

剪断前的连接状态如下。可以验证,此时不存在能够按照生长规则继续长出的连接。

可以剪断连接 (1,2)(1,2)(4,5)(4,5),得到下图:

连接 (1,2)(1,2) 能够重新长出,因为花 11 和花 22 都与花 44、花 55 相连。

随后连接 (4,5)(4,5) 也能够重新长出,因为花 44 和花 55 都与花 11、花 22 相连。因此最终能够恢复原图,共剪断了 22 条连接。