#P1422. Air Raid

Air Raid

描述

考虑一个所有街道都是单向的小镇,每条街道从一个十字路口通向另一个十字路口。已知从任意一个十字路口出发,沿着小镇的街道行走,你永远无法回到同一个十字路口,即小镇的街道不形成任何环路。

在这些假设下,你的任务是编写一个程序,找到可以降落在小镇上并访问所有十字路口的最小伞兵数量。要求每个伞兵降落在某个十字路口,并可以沿着街道访问其他十字路口,且每个十字路口只能被一个伞兵访问。每个伞兵的起始十字路口没有限制。

输入

你的程序需要读取多组数据。输入文件的第一行是数据组的数量。每组数据描述一个小镇的结构,格式如下:

十字路口数量
街道数量
S1 E1
S2 E2
......
S街道数量 E街道数量

每组数据的第一行是一个正整数十字路口数量十字路口数量(大于0且小于或等于120),表示小镇中的十字路口数量。第二行是一个正整数街道数量街道数量,表示小镇中的街道数量。接下来的街道数量街道数量行,每行随机排列,描述小镇的街道。第kk条街道(k街道数量k \leq 街道数量)由两个正整数组成,中间用一个空格隔开:SkS_k1Sk十字路口数量1 \leq S_k \leq 十字路口数量)表示街道的起始十字路口编号,EkE_k1Ek十字路口数量1 \leq E_k \leq 十字路口数量)表示街道的终点十字路口编号。十字路口编号为1到十字路口数量十字路口数量的整数。

连续的数据组之间没有空行。输入数据保证正确。

输出

程序的结果输出到标准输出。对于每组输入数据,程序在一行中输出一个整数,表示访问小镇所有十字路口所需的最小伞兵数量。

输入数据 1

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

输出数据 1

2  
1

来源
达卡 2002