P15071 [UOI 2024 II Stage] Matches

题目描述

Anton 发明了一项名为水球(类似彩弹,但用水)的新团队运动。他想与他的 $n$ 个朋友分享这项发明。Anton 与所有朋友关系都很好,但不能保证他的朋友们彼此之间关系同样融洽。具体来说,我们知道编号为 $a_i$ 的朋友与编号为 $b_i$ 的朋友存在冲突。 Anton 得到了一个包含 $m$ 个冲突对 ($a_i;b_i$) 的列表。现在,看似可以将玩家分成两队,但对 Anton 来说并不那么简单…… 他想要将这些 $m$ 个冲突对划分成若干段,使得: - 每个冲突对恰好属于一段; - 仅考虑每段内的冲突关系时,可以将所有人分成两队,使得同一队中没有两个相互冲突的人。 例如,假设我们有冲突对数组 $[(1, 2), (2, 3), (1, 3)]$。我们可以将前两个对放在第一段。此时,可以组成队伍:$[1, 3]$ 和 $[2]$。在第二段中,我们可以取最后一个对。$1$ 和 $3$ 必须分在不同队伍,$2$ 可以在任意一队。或者,我们可以将第一个对分配给第一段,最后两个对分配给第二段。注意,我们不能将第一个和第三个对放在同一段,而将第二个对放在另一段,因为一段应当只包含连续的冲突对。我们也不能将所有对放在同一段,因为那样总会存在一个队伍中有相互冲突的人。 Anton 又把问题描述复杂化了,现在他自己无法解决这个问题。请帮助他,告诉他满足上述条件时,最少可以将这些对划分成多少段。

输入格式

- 第一行包含两个整数 $n$、$m$($1 \le n, m \le 10^6$)——朋友数量和冲突关系数量。 - 接下来的 $m$ 行,每行包含两个整数 $a_i$、$b_i$($1 \le a_i, b_i \le n$,$a_i \neq b_i$),表示朋友 $a_i$ 与朋友 $b_i$ 存在冲突。 保证任何冲突对 ($a;b$) 不会重复出现。

输出格式

输出一个整数——问题的答案。

说明/提示

第一个示例已在题目描述中解释。 在第二个示例中,例如可以划分成以下三段:$[1;6]$、$[7;9]$、$[10;10]$。 - 在第一段中,可以组成队伍 $[1,4]$ 和 $[2,3,5]$ —— $1$ 和 $4$ 不冲突,且 $(2;3)$、$(2;5)$、$(3;5)$ 也不冲突。 - 在第二段中,可以组成队伍 $[1,3]$ 和 $[2,4,5]$ —— $1$ 和 $3$ 不冲突,且 $(2;4)$、$(2;5)$、$(4;5)$ 也不冲突。 - 在第三段中,可以组成队伍 $[1,2]$ 和 $[3,4,5]$ —— $1$ 和 $2$ 不冲突,且 $(3;4)$、$(3;5)$、$(4;5)$ 也不冲突。 ### 评分细则 - ($4$ 分):$n \le 3$; - ($7$ 分):$n \le 10$; - ($15$ 分):$n, m \le 5000$; - ($13$ 分):输入中的冲突对随机生成;这意味着从所有 $\frac{n (n-1)}{2}$ 个对中随机选择了 $m$ 个对; - ($14$ 分):每个人冲突的对象不超过 $10$ 个; - ($19$ 分):$n \le 10^5$; - ($17$ 分):$n \le 2 \cdot 10^5$; - ($11$ 分):无额外限制。 翻译由 DeepSeek V3 完成