Krydom: 暁の水平线に胜利を刻むのです

ソロモンの悪夢、見せてあげる!

@krydom2年前

01/3
13:40
tarjan缩环

[bzoj 1051] HAOI2006 受欢迎的牛

00:00/00:00

♦♦♦♦♦♦   Description   ♦♦♦♦♦♦

 每一头牛的愿望就是变成一头最受欢迎的牛。现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎。 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认为牛C受欢迎。你的任务是求出有多少头牛被所有的牛认为是受欢迎的。

♦♦♦♦♦♦   Input   ♦♦♦♦♦♦

第一行两个数N,M。 接下来M行,每行两个数A,B,意思是A认为B是受欢迎的(给出的信息有可能重复,即有可能出现多个A,B)

♦♦♦♦♦♦   Output   ♦♦♦♦♦♦

一个数,即有多少头牛被所有的牛认为是受欢迎的。

♦♦♦♦♦♦   Sample Input   ♦♦♦♦♦♦

3 3
1 2
2 1
2 3

♦♦♦♦♦♦   Sample Output   ♦♦♦♦♦♦

1

♦♦♦♦♦♦   Hint   ♦♦♦♦♦♦

100%的数据N<=10000,M<=50000

♦♦♦♦♦♦   题解  ♦♦♦♦♦♦

tarjan缩点,最后求入度为0的点的环的大小。当有大于等于两个入度为0的环时,两个环中的元素互相不认为对方环中的元素是受欢迎的,这时候应该输出0.

c++:

pascal:

 

[bzoj 1051] HAOI2006 受欢迎的牛