版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、强连通分支JustForU本讲义部分内容引用北京大学信息学院实验班袁洋、陈科吉同学讲义,特此致谢强连通分支 在有向图G中,如果任意两个不同的顶点相互可达,则称该有向图是强连通的。 有向图G的极大强连通子图称为G的强连通分支。计算强连通分支的两种方法 Korasaju tarjan 定义DFN(u)为节点u搜索的次序编号(时间戳) Low(u)为u或u的子树能够追溯到的最早的栈中节点的次序号 Low(u)=Min DFN(u), Low(v),(u,v)为树枝边,u为v的父节点 DFN(v),(u,v)为指向栈中节点的后向边(非横叉边) 思想: 做一遍DFS,用dfni表示编号为i的节点在DFS
2、过程中的访问序号(也可以叫做开始时间)用lowi表示i节点及其下方节点所能到达的开始时间最早的节点的开始时间。初始时dfni=lowi 在DFS过程中会形成一搜索树。在搜索树上越上层的节点,显然dfn的值就越小。 如果发现某节点有边连到搜索树中自己的祖先节点,则更新其low 值。 如果一个节点的low 值小于dfn值,那么就说明它或其子孙节点有边连到自己上方的节点 如果一个节点的low值等于dfn值,则说明其下方的节点不能走到其上方的节点,那么该节点u就是一个强连通分量在DFS搜索树中的根。 但是u的子孙节点未必就和u处于同一个强连通分量,怎么办?用栈解决. 从节点1开始DFS,把遍历到的节点
3、加入栈中。搜索到节点u=6时,DFN6=LOW6,找到了一个强连通分量。退栈到u=v为止,6为一个强连通分量。过程演示 返回节点5,发现DFN5=LOW5,退栈后5为一个强连通分量。过程演示 返回节点3,继续搜索到节点4,把4加入堆栈。发现节点4向节点1有后向边,节点1还在栈中,所以LOW4=1。节点6已经出栈,(4,6)是横叉边,返回3,(3,4)为树枝边,所以LOW3=LOW4=1。过程演示 继续回到节点1,最后访问节点2。访问边(2,4),4还在栈中,所以LOW2=DFN4=5。返回1后,发现DFN1=LOW1,把栈中节点全部取出,组成一个连通分量1,3,4,2。过程演示过程演示 至此,
4、算法结束。经过该算法,求出了图中全部的三个强连通分量1,3,4,2,5,6。void tarjan(int u)dfnu=lowu=+index;s.push(u);instacku=true;for(int e=headu;e!=-1;e=nexte)if(dfnedgee.to=-1)tarjan(edgee.to);lowu=min(lowu,lowedgee.to);else if(instackedgee.to)lowu=min(lowu,dfnedgee.to);if(dfnu=lowu)while(1)int temp=s.top();s.pop();belongtemp=Cou
5、nt;instacktemp=false;if(temp=u)break;Count+; /strongly connect number初始化及运行 memset(instack,false,sizeof(instack); memset(dfn,-1,sizeof(dfn); index=0; for(int i=1;i=n;i+)if(dfni=-1)tarjan(i); 无向连通图中,如果删除某点后,图变成不连通,则称该点为割点。 无向连通图中,如果删除某边后,图变成不连通,则称该边为桥。思路和有向图求强连通分量类似一个顶点u是割点,当且仅当满足(1)或(2)(1) u为树根,且u有多
6、于一个子树。(2) u不为树根,且满足存在(u,v)为树枝边(或称父子边,即u为v在搜索树中的父亲),使得DFS(u)=Low(v)。一条无向边(u,v)是桥,当且仅当(u,v)为树枝边,且满足DFS(u)Low(v)(前提是其没有重边)。上面的 “树”指的是在DFS过程中形成的搜索树给定一个有向图,求有多少个顶点是由任何顶点出发都可达的。顶点数= 10,000,边数 = 50,000有向无环图中唯一出度为0的点,一定可以由任何点出发均可达(由于无环,所以从任何点出发往前走,必然终止于一个出度为0的点)1. 求出所有强连通分量2. 每个强连通分量缩成一点,则形成一个有向无环图DAG。3. DA
7、G上面如果有唯一的出度为0的点,则该点能被所有的点可达。那么该点所代表的连通分量上的所有的原图中的点,都能被原图中的所有点可达,则该连通分量的点数,就是答案。4. DAG上面如果有不止一个出度为0的点,则这些点互相不可达,原问题无解,答案为0题目大意:N(2N100)各学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输,问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件。2,至少需要添加几条传输线路(边),使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校最终都能得到软件。给定一个有向图,求:1) 至少要选几个顶点,才能做到从这
8、些顶点出发,可以到达全部顶点2) 至少要加多少条边,才能使得从任何一个顶点出发,都能到达全部顶点顶点数= 100有向无环图中所有入度不为0的点,一定可以由某个入度为0的点出发可达。(由于无环,所以从任何入度不为0的点往回走,必然终止于一个入度为0的点)1. 求出所有强连通分量2. 每个强连通分量缩成一点,则形成一个有向无环图DAG。3. DAG上面有多少个入度为0的顶点,问题1的答案就是多少在DAG上要加几条边,才能使得DAG变成强连通的,问题2的答案就是多少加边的方法:要为每个入度为0的点添加入边,为每个出度为0的点添加出边假定有 n 个入度为0的点,m个出度为0的点,如何加边?把所有入度为
9、0的点编号 0,1,2,3,4 .N -1每次为一个编号为i的入度0点可达的出度0点,添加一条出边,连到编号为(i+1)%N 的那个出度0点,这需要加n条边若 m n,则还有m-n个入度0点,则从这些点以外任取一点,和这些点都连上边,即可,这还需加m-n条边。所以,max(m,n)就是第二个问题的解acm1236,acm3180,acm2762(强连通+拓扑排序),acm2553,acm3114(强连通+dijkstra), acm3160(强连通+DP) 对于点双连通分支,实际上在求割点的过程中就能顺便把每个点双连通分支求出。建立一个栈,存储当前双连通分支,在搜索图时,每找到一条树枝边或反向边,就把这条边加入栈中。如果遇到某时满足DFS(u)=Low(v),说明u是一个割点,同时把边从栈顶一个个取出,直到遇到了边(u,v),取出的这些边与其关联的点,组成一个点双连通分支。割点可以属于多个点双连通分支,其余点和每条边只属于且属于一个点双连通分支。只需在求出所有的桥以后,把桥边删除,原图变成了多个连通块,则每个连通块就是一个边双连通分支。桥不属于任何一个边双连通分支,其余的边和每个顶点都属于且只属于一个边双连通分支。 给你一个图,要求你加入最少的边,使得最后得到的图为一个双连通分支。所谓的双连通分支,即不存在桥的连通分支。 可以求
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位管理制度呈现大全【职工管理】
- 《会展项目管理复习》课件
- 《市场营销环境》课件
- 银行工作总结服务至上效率为王
- 家政服务行业销售工作总结
- 保育实习工作总结15篇
- 2023年项目部安全培训考试题加答案解析
- 2023年员工三级安全培训考试题及答案(考点梳理)
- 中考誓师口号(15篇)
- 2023年-2024年项目部治理人员安全培训考试题加答案解析
- 做账实操-科学研究和技术服务业的账务处理示例
- 2025年人教版历史八上期末复习-全册重难点知识
- 山东省滨州市2023-2024学年高一上学期1月期末考试 政治 含答案
- 仪控技术手册-自控专业工程设计用典型条件表
- 《庆澳门回归盼祖国统一》主题班会教案
- 洗衣房工作人员岗位职责培训
- 广东省深圳市光明区2022-2023学年五年级上学期数学期末试卷(含答案)
- XX小区春节灯光布置方案
- 《华为销售人员培训》课件
- 《广西壮族自治区房屋建筑和市政工程施工招标文件范本(2023年版)》
- 2024年化学螺栓锚固剂项目可行性研究报告
评论
0/150
提交评论