题意:有一些骨牌,告诉你一些关系a->b表示a倒了b也会倒。然后问你最少要推到几个才能使所有的骨牌都倒下。
思路:这道题其实就是用的强连通分支的kosaraju算法。其实在了解了这个算法之后我们不妨来想想是怎么样的一个逻辑关系。第一遍dfs我们先得到了在vs数组中的拓扑关系。到了第二遍,我们就从拓扑序列高的先开始dfs(可以直观的了解到只要拓扑序列高的倒下了,那么拓扑序列低的必定倒下了)所以我们得到的dfs次数即为答案了。
代码如下:
1 /************************************************** 2 * Author : xiaohao Z 3 * Blog : http://www.cnblogs.com/shu-xiaohao/ 4 * Last modified : 2014-01-28 22:16 5 * Filename : uva_11504.cpp 6 * Description : 7 * ************************************************/ 8 9 #include10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include 19 #include