学习了强连通分量Tarjan算法
今天终于学会了强连通分量的Tarjan算法,byvoid大神写的很不错,附上大神blog的连接:https://www.byvoid.com/blog/scc-tarjan
Tarjan是通过深搜遍历每个点,用DFN[x]表示x在深搜的过程中出现的时间,LOW[x]表示x或x的子树能追溯到的最早出现时间,当DFS[x]==LOW[x],x和x的子树就是一个强连通分量啦,因为自己追溯回自己了嘛。。因为每个点和边遍历一次,所以时间效率就是O(n+m)。Tarjan还有很广泛的应用,而且时间效率高,是个不错的算法。
下面附上我A了的一些强连通分量有关的题目和简要题解:
这题对于每个关系A认为B受欢迎,我们从A向B连一条有向边,然后做一遍Tarjan缩点,可以得出每头牛所在的点,如果有且仅有一个点的出度为0,那么这个点中的每头牛都是受所有牛欢迎的,如果一个点有出度或者有两个点出度为0,这些点中的牛都是不受所有牛欢迎的,这应该很好想,只需要判断缩点后是否有且仅有一个点的出度为0,然后统计这个点中牛的个数即可。