首页 > 其他分享 >tarjan(dcc-e)

tarjan(dcc-e)

时间:2023-08-05 09:45:47浏览次数:42  
标签:tarjan 连通 int dcc dfn low

[冗余路径](395. 冗余路径 - AcWing题库)

考虑无向图的边双连通分量。

这个算法也叫 Tarjan 算法,且与有向图的强连通分量差不多。

边双是指图中任意两点间都存在两条不相交的路径(或删去任意一条边后图仍然连通)。

桥:切去这条边后,图不连通。

由于这是无向图,所以定义中不包含横叉边。

考虑依然维护 dfnlow

区别在于,如果是第一次遍历同有向图,同样用low更新low。如果是第二次,只需判断是不是这条边是不是父亲边的反向边,而不需要判断是不是在栈中。同时无需标记某个点是否在栈中。

void tarjan(int x,int from){
    dfn[x]=low[x]=++now;
    stk[++top]=x;
    Ed{
        int j=e[i];
        if(!dfn[j]){
            tarjan(j,i);
            low[x]=min(low[x],low[j]);
            if(dfn[x]<low[j])b[i]=b[i^1]=1;
        }
        else if(i!=(from^1))low[x]=min(low[x],dfn[j]);
    }
    if(low[x]==dfn[x]){
        ++dcc_cnt;
        int y;
        do{
            y=stk[top--];
            id[y]=dcc_cnt;
        }while(y!=x);
    }
}

这道例题,我们首先缩点,因为在一个dcc-e中的所有点一定满足要求。而缩点结束后所有的边都是桥,所以就是一棵树,相当于在树上加边使其变为边双连通分量,一个比较好想的就是所有度为1的点首尾相接,形成环,若剩余一点随便搞,如下图。

image-20230805092626710

最少需要的边数恰好是度为1的点数除以2上取整,即度为1的点数加1下取整。

code

标签:tarjan,连通,int,dcc,dfn,low
From: https://www.cnblogs.com/wscqwq/p/17607514.html

相关文章

  • 图论强联通分量(tarjan)算法
    图论强联通分量(tarjan)算法#include<bits/stdc++.h>usingnamespacestd;intn,m,cnt,cntb,ans;vector<int>edge[101];vector<int>belong[101];boolinstack[101];intdfn[101];intlow[101];stack<int>s;voidTarjan(intu){ ++cnt; dfn[u]=......
  • wsr_tarjan
    Tarjan首先是概念:极大强连通分量:不能再加入一点保持整个图强连通的图强连通分量:从任意一点能到达另一任意一点的图Tarjan原理树边 :在树上(图中黑色边)横插边 :从一棵子树到另一棵子树的边(图中绿色边)3、 返祖边 :连到自己的祖先的边观察图,我们可以注意到:横插......
  • LCA 离线tarjan算法
    tarjan算法是离线算法,它必须先将所有的要查询的点对存起来,然后在搜的时候输出结果。tarjan算法很经典,因为算法的思想很巧妙,利用了并查集思想,在dfs下,将查询一步一步的搜出来。伪代码如下:可以看到,对于我们已经保存好的查询,假设为(u,v),u为此时已经搜完的子树的根节点,v的位置就只有两种......
  • tarjan 学习笔记
    tarjan学习笔记求解强联通分量我们从一个点开始建立dfs树,有如下四种边:树边若\(u\)到\(v\)有边,且满足\(v\)没有被访问过,则这条边为树边返祖边若\(u\)到\(v\)有边,且满足\(v\)已被访问过,则这条边为返祖边横叉边若\(u\)到\(v\)有边,且满足\(u\)和......
  • 【学习笔记】Tarjan
    前言:凡事都得靠自己--bobo催隔壁K8Hen天了让他写Tarjan的学习笔记,但貌似还没有动静,所以决定自己写一个。正文本文配套题单:14.图论-tarjan(强连通分量、割点、割边)前置知识熟练使用链式前向星强连通、强连通图、强连通分量的定义(详见oi-wiki,这里不再赘述)如图......
  • BZOJ 2730: [HNOI2012]矿场搭建 tarjan割点
    2730:[HNOI2012]矿场搭建TimeLimit: 10Sec  MemoryLimit: 128MBSubmit: 2010  Solved: 935[Submit][Status][Discuss]Description煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口......
  • BZOJ 2140: 稳定婚姻 tarjan
    2140:稳定婚姻TimeLimit: 2Sec  MemoryLimit: 259MBSubmit: 764  Solved: 355[Submit][Status][Discuss]Description我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关。25......
  • BOZJ 1123: [POI2008]BLO tarjan求割点
    1123:[POI2008]BLOTimeLimit: 10Sec  MemoryLimit: 162MBSubmit: 1140  Solved: 505[Submit][Status][Discuss]DescriptionByteotia城市有n个townsm条双向roads.每条road连接两个不同的towns,没有重复的road.所有towns连通。Input输入n<=100000m<=5......
  • [算法学习笔记] Tarjan LCA
    在讲解之前,我们先来看一道模板题:LuoguP3379最近公共祖先(LCA)WhatisLCALCA,即最近公共祖先。什么意思呢,我们举个例子:将就着看吧qwq这棵树中,0为根节点。若规定\(LCA(x,y)\)为\(x,y\)的最近公共祖先,则\(LCA(5,6)=2;LCA(4,3)=1;LCA(5,3)=0\)。还有很多,这里不一一列举了。最......
  • R语言改进的DCC-MGARCH:动态条件相关系数模型、BP检验分析股市数据
    全文链接:http://tecdat.cn/?p=32818原文出处:拓端数据部落公众号股票市场波动性模型一直是金融领域研究的热点之一。传统的波动性模型往往只考虑了静态条件下的波动性和相关性,难以准确捕捉市场的复杂性和多样性。因此,本文提出了一种基于R语言改进的DCC-MGARCH模型,帮助客户探究动......