关于tarjan的一些想法

仅代表个人观点,如有雷同,一定是他抄我的。如有错误,那一定是你rp不好
  —— 我

不知道tarjan的,右转百度百科。

本篇blog只讨论tarjan缩环。
如果你不是用链式前向星存边的,那就 Gun
先去学完再来看这篇精美的blog吧~

tarjan用法

  tarjan是种非常好用的图论基本工具。缩环,找割点都行。

tarjan的缺陷

  tarjan原版的工具是只能够用来缩有向图的环。这就很坑了,如果我要无向图缩环应该怎么办呢?
  很简单,把无向图当成有向图就好了。具体实现就是记录上一个搜索的点是什么,然后拒绝回头路【不走来时的点】就好了。
  但是,问题又来了。如果有重边而且重边也当做是环怎么办??

解决方案(我瞎比吹的)

  把记录上一个点改为记录上一条来的边。有什么用呢?首先,你得是链式前向星的存边方式。这链式前向星有什么特点呢?链式前向星存的全是有向边,这个工具是通过再建立一条反向边来形成无向边的。也就是说,你只需要不再通过这条反向边回去,就能够避免重边找不到环的情况。至于为什么,聪明yuchun的你一定能搞懂。
  接下来就把问题从“不再回去上一个点”变成“不在走上一条边的反向边”。这就很容易了,运用网络流建边的套路——从偶数点开始建边,无向边拆出来的两条边同时建立,那么,如果第一条边的编号是i,那么反向边的编号就是i^1。搜索的时候把这个i^1传递下去就好了。

随意谢谢,全凭走心

你可能感兴趣的:(小技巧【灌水?】,tarjan)