双连通分量(下):桥

废话

关于割点,请看前面一篇文章。


定义

度娘的解释:假设有连通图G,e是其中一条边,如果G-e是不连通的,则边e是图G的一条割边。此情形下,G-e必包含两个连通分支。
换句话说,就是一个连通图的必经之路(割点是必经之点)。


思路

首先,求桥要用Tarjin,所以dfn和low数组还是要有的。
然后是判断一条边是桥的条件:
当一条边是树枝边(即从父亲k到儿子p去的边),然后low[p]>=dfn[k],即p不通过k而能到达的最小值(即从p的子树走)比k要大,那么这条边就是桥。
(很简单是不是)
其他和tarjin一样,于是就有下面的代码了。

void tarjin(int k,int fa)
{
  low[k]=dfn[k]=++tot;
  for(int i=head[k]; i; i=a[i].nxt)
    if(a[i].to==fa) continue;
    else if(!dfn[a[i].to])
    {
      tarjin(a[i].to,k),low[k]=min(low[k],low[a[i].to]);
      if(low[a[i].to]>dfn[k]) ans++;
    }
    else low[k]=min(low[k],dfn[a[i].to]);
}

小结

求桥用Tarjin,判断条件是low[a[i].to]>dfn[k],其余和tarjin一样,不变。这个Tarjin的模板代码还是很常用的。


完结撒花!!!
别忘了点赞关注,谢谢!!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 双连通分量 点_双连通分量 BCC对于一个连通图,如果任意两点至少存在两条“点不重复”的路径,则说图是点双连通的(...
    Gitfan阅读 2,189评论 0 0
  • tarjan算法实现,low数组代表该点最先追溯到的编号,dfn数组代表该点按照访问次序编的号。 强连通分量:有向...
    Joseph_Z阅读 763评论 0 0
  • 概念 强联通:如果有向图中两个点vi和vj,其中vi到vj之间有一条有向路径,vj到vi有一条有向路径,则称vi,...
    idella阅读 885评论 0 0
  • 在LC里面的图论题,一般还是非常基础的,BFS,或者Dijkstra 为主。造成其实有很多经典的图论算法运用的不多...
    西部小笼包阅读 699评论 0 3
  • 强连通分量 相关概念 强连通:在有向图G中,如果两个顶点u,v间存在一条u到v的路径且也存在 一条v到u的路径,则...
    opbnbjs阅读 1,552评论 0 2