#eFTFGlydlt60x6904. 捉迷藏
捉迷藏
好的,这是整理好的题面,不含解题思路,只包含样例解释。
题目描述
Vani 和 cl2 在一片树林里捉迷藏。
树林里有 座房子, 条有向道路,组成一张有向无环图(DAG)。
树林里的树可以遮挡视线,但沿着道路望去视野开阔。
如果从房子 沿着路走下去能够到达 ,那么在 和 里的人是能够相互望见的。
现在 cl2 要在这 座房子里选择 座作为藏身点,同时 Vani 也专挑 cl2 藏身点的房子寻找。
为了避免被 Vani 看见,cl2 要求这 个藏身点的任意两个之间都没有路径相连(即它们相互不可达,不会互相望见)。
为了让 Vani 更难找到自己,cl2 想知道最多能选出多少个藏身点。
输入格式
第一行两个整数 和 。
接下来 行,每行两个整数 ,表示一条从 到 的有向道路。
输出格式
输出一个整数,表示最多能选取的藏身点个数。
数据范围
输入样例
7 5
1 2
3 2
2 4
4 5
4 6
输出样例
3
样例解释
个房子, 条有向边:
1→2
3→2
2→4
4→5
4→6
图结构(DAG):
1 → 2 → 4 → 5
↘ 6
3 → 2
7 (孤立点)
要求
选择最多的房子,使得任意两个被选的房子之间没有路径可达(既不能从 A 到 B,也不能从 B 到 A)。
在 DAG 中,这样的集合叫反链(antichain)。
Dilworth 定理:在 DAG 中,最小路径覆盖数 = 最长反链的大小。
但这里我们需要直接求最长反链。
求最长反链
这个图比较小,可以枚举。
一种最长反链:选 {1,3,7}
- 1 到 3 无路径
- 1 到 7 无路径
- 3 到 7 无路径
它们彼此不可达。
另一种:{1,3,5} 也彼此不可达。
还有 {1,3,6}。
是否可能选 4 个?
房子总共有 7 个,考虑拓扑关系:
2 和 4 能到达很多点,如果选它们,很多点就不可选了。
试选 {1,3,5,6}:5 和 6 都能从 4 到达,但 5 和 6 之间无路径,且 1 和 3 与 5、6 无路径关系,所以 {1,3,5,6} 也是反链?
检查:1 与 5:1→2→4→5 有路径,所以 1 与 5 不能共存。
所以 {1,3,5,6} 不行,因为 1 能到 5。
因此最长反链大小是 3。
输出 3。