• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
smallling
博客园    首页    新随笔    联系   管理    订阅  订阅

学习了强连通分量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了的一些强连通分量有关的题目和简要题解:

[BZOJ1051]受欢迎的牛

这题对于每个关系A认为B受欢迎,我们从A向B连一条有向边,然后做一遍Tarjan缩点,可以得出每头牛所在的点,如果有且仅有一个点的出度为0,那么这个点中的每头牛都是受所有牛欢迎的,如果一个点有出度或者有两个点出度为0,这些点中的牛都是不受所有牛欢迎的,这应该很好想,只需要判断缩点后是否有且仅有一个点的出度为0,然后统计这个点中牛的个数即可。

posted @ 2014-04-24 19:12  smallling  阅读(116)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3