#eFTFGlydlt60x6904. 捉迷藏

捉迷藏

好的,这是整理好的题面,不含解题思路,只包含样例解释。


题目描述

Vani 和 cl2 在一片树林里捉迷藏。
树林里有 NN 座房子,MM有向道路,组成一张有向无环图(DAG)

树林里的树可以遮挡视线,但沿着道路望去视野开阔。
如果从房子 AA 沿着路走下去能够到达 BB,那么在 AABB 里的人是能够相互望见的。

现在 cl2 要在这 NN 座房子里选择 KK 座作为藏身点,同时 Vani 也专挑 cl2 藏身点的房子寻找。
为了避免被 Vani 看见,cl2 要求这 KK 个藏身点的任意两个之间都没有路径相连(即它们相互不可达,不会互相望见)。

为了让 Vani 更难找到自己,cl2 想知道最多能选出多少个藏身点。


输入格式

第一行两个整数 NNMM
接下来 MM 行,每行两个整数 x,yx,y,表示一条从 xxyy 的有向道路。

输出格式

输出一个整数,表示最多能选取的藏身点个数。

数据范围

  • N200N \le 200
  • M30000M \le 30000
  • 1x,yN1 \le x,y \le N

输入样例

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

输出样例

3

样例解释

N=7N=7 个房子,M=5M=5 条有向边: 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