#220. 「Air Raid」 空袭

「Air Raid」 空袭

一个城镇由 N 个交叉口和 M 个单向道路组成,每条道路从一个交叉口通向另一个交叉口。

从任何一个交叉口出发,经过城镇的街道都无法回到出发的交叉口,即城镇的街道无法形成一个循环。

现在要选择一些交叉口空降士兵,士兵可以沿着街道一直走到尽头。

要求空降士兵走遍所有的交叉口,并且每个交叉口只能被一个士兵走一次。

请问最少需要多少名士兵。

输入格式

第一行包含整数 T,表示共有 T 组测试数据。

每组测试数据第一行包含整数 N,第二行包含整数 M。

接下来 M 行,每行包含两个整数 X 和 Y,表示存在一条道路从交叉口 X 通向交叉口 Y。

输出格式

每组数据输出一个整数,表示需要的最少士兵数目。

每个结果占一行。

数据范围

0<N1200 < N \le 120,
1X,YN1 \le X,Y \le N

输入样例:

2
4
3
3 4
1 3
2 3
3
3
1 3
1 2
2 3

输出样例:

2
1

来源

  • 《算法竞赛进阶指南》
  • acwing 可能含有视频讲解