Description
要使两个集合 A,B 是等效的,我们可以先让 A 成为 B 的子集,然后再让 B 成为 A 的子集,这样就完成了。
使用上面的方法,我们要让 N 个集合都等效:每一步,你可以让集合 X 成为 Y 的子集。注意,有一些集合是已经是其他集合的子集了。求操作最少需要经过多少步?
Input
输入包含多组测试数据,每组数据的第一行是两个整数 N,M,接下来 M 行,每行两个数 X,Y,表示集合 X 已经是 Y 集合的子集。
Output
对于每组测试数据,输出一行,一个数,表示最少要经过的步数
Sample Input
4 0
3 2
1 2
1 3
Sample Output
4
2
Hint
对于 50%的数据, N <= 2000 and M <= 5000
对于 100%的数据,N <= 20000 and M <= 50000
题解
把非强连通图变为强连通图至少需要加多少条边。
$DAG$性质:对于一个有向无环图,若想让它成为强连通图,至少需要添加$max(a,b)$,$a$为入度为$0$的边点的数量,$b$为出度为$0$的点的数量。
注意当图本身就是强连通图的时候,就不用添边了。
1 //It is made by Awson on 2017.10.12 2 #include