/ Vijos / 题库 /

毕业宴会

毕业宴会

时间限制:1秒  内存限制:256M


【题目描述】

  小H想邀请\(n\)个好朋友参加他的高中毕业宴会。虽然小H与所有朋友关系都很好,但不能保证他的朋友们彼此之间关系同样融洽。具体来说,我们知道编号为 \(a_i\) 的朋友与编号为 \(b_i\) 的朋友存在冲突。
  小H得到了一张包含 \(m\) 个冲突对 \((a_i,b_i)\) 的列表。现在,看似可以将玩家分成两队,但对小H来说并不那么简单……,他想要将这些\(m\)个冲突对划分成若干段,使得:
   ◆每个冲突对恰好属于一段;
   ◆仅考虑每段内的关系时,可将所有人分成两队,使得同一队中没有相互冲突的人。
  小H又把问题描述复杂化了,现在他自己无法解决这个问题。请帮助他,告诉他满足上述条件时,最少可以将这些对划分成多少段。

【输入格式】

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

【输出格式】

  输出一个整数,表示问题的答案。

【输入输出样例1】

 Input

3 3
1 2
2 3
1 3

 Output

2

【样例1说明】

  有3对冲突关系:(1, 2),(2, 3),(1, 3)]。小H可以将前两个对放在第一段。此时,可以组成队伍:{1,3} 和 {2}。在第二段中,我们可以取最后一个对。1和3必须分在不同队伍,2可以在任意一队。或者,我们可以将第一个对分配给第一段,最后两个对分配给第二段。注意,我们不能将第一个和第三个对放在同一段,而将第二个对放在另一段,因为一段应当只包含连续的冲突对。我们也不能将所有对放在同一段,因为那样总会存在一个队伍中有相互冲突的人。

【输入输出样例2】

 Input

5 10
2 4
1 2
3 4
1 3
1 5
4 5
2 3
3 5
1 4
2 5

 Output

3

【样例1说明】

  可以划分成以下三段:[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≤3\);
  (7 分):\(n≤10\);
  (15 分):\(n,m≤5000\);
  (13 分):输入中的冲突对随机生成;这意味着从所有 \(n(n−1)/2\) 对中随机选择 \(m\) 对;
  (14 分):每个人冲突的对象不超 1 个;
  (19 分):\(n≤100000\);
  (17 分):\(n≤200000\);
  (11 分):无额外限制。

【来源】

  Mr.he

信息

ID
3271
难度
9
分类
贪心 | 图结构 | 二分图 点击显示
标签
(无)
递交数
2
已通过
1
通过率
50%
被复制
2
上传者