跳转至

神经突击车

  • 参考时间限制:0.5 秒(参考环境:评测环境与性能;仅供预估)
  • 实际时间限制:标准程序在目标评测环境中处理最慢正式测试文件的基准时间的 2 倍,按 0.5 秒的倍数向上取整;若平台仅支持更粗的粒度,再向上取整到平台可设置值。
  • 内存限制:128 MB

背景故事

拉恩被几支敌军围困,神经突击车赶来协助撤离。每辆突击车可以挑起两支敌军之间的冲突,也可以使一支敌军陷入内乱。只要所有敌军都被其中一种方式牵制,撤离就能开始。突击车造价昂贵,请尽量少使用它们。

形式化问题描述

有 \(n\) 支军队,以及 \(m\) 对允许制造冲突的军队。一次行动消耗一辆神经突击车,可任选以下一种方式:

  • 选择给定的一对军队,使这两支军队都被牵制。
  • 选择任意一支军队,使它被内部混乱牵制。

求使全部 \(n\) 支军队都被牵制所需的最少行动次数。允许多次行动涉及同一支军队,但不必这样做。

军队由区分大小写的代号标识,代号只出现在允许制造冲突的关系中。若输入中只出现 \(d<n\) 种代号,其余 \(n-d\) 支军队都没有可用的冲突关系,只能单独制造内部混乱。

输入格式

第一行包含两个整数 \(n,m\) .接下来 \(m\) 行,每行两个由空白分隔的代号,表示一对允许制造冲突的军队。

输出格式

输出一行一个整数,表示最少行动次数。

样例 1

输入

8 9
100 200
200 300
300 400
300 500
300 600
400 500
600 500
500 -700
501 -700

输出

4

解释

可分别选择四对:100–200 、300–600 、400–500 和 501–-700 .每次至多牵制两支军队,所以四次已是最优。

样例 2

输入

6 6
1 2
2 3
1 3
3 4
4 5
5 6

输出

3

解释

选择关系 \(1\)–\(2\) 、\(3\)–\(4\) 和 \(5\)–\(6\) ,三次即可覆盖全部军队。

样例 3

输入

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

输出

3

解释

选两对互不相交的军队,再使剩下一支军队陷入内部混乱。

样例 4

输入

3 0

输出

3

解释

三支军队都没有可用关系,分别处理。

数据范围与保证

  • \(1\le n\le300\) ,\(0\le m\le n(n-1)/2\) .
  • 没有重边或自环;输入中不同代号的数量不超过 \(n\) .
  • 每个代号为非空 UTF-8 字符串,长度不超过 \(80\) 字节,只含英文字母、数字、下划线、连字符或汉字;不含空白。

数据分组

分值比例 额外条件
20% \(n\le10\) ,\(m\le20\)
20% 关系图为树或森林
20% 每个连通分量恰有一个环
10% 关系图为完全图
30% 无额外条件