ACM培训——图论(一).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ACM培训——图论(一)

割边 双联通分支: 在图G的所有子图G中,如果G是双连通的,则称G为双连通子图。如果一个双连通子图G它不是任何一个双连通子图的真子集,则G为极大双连通子图。双连通分支,或重连通分支,就是图的极大双连通子图。特殊的,点双连通分支又叫做块。 去掉任一割边/割点: 图被分割成多个联通块 去掉所有割边: 图被分割成多个双连通分支。 (点双联通分支又称为“块”) 割点也分割了双联通分支,但是割点是属于双联通分支的。 注意: 割点同时属于多个双联通分支,割边不属于双联通分支, 其它点和边只属于一个双连通分支 求割点 原来路线+替代路线=环。移除一个点之后,经过改点的路线被截断了。要是沒有替代路线,无法绕过该点,就会不联通,该点就形成关节点。反过来说,如果有替代路线,该点就不会形成关节点。 要在一张图上找替代路线不太直接,但是找环就比较直接了──把图重新画成树的形状,就容易找环了!要把图重新画成树的形状,利用DFS遍历就可以了。 任取树上的一个点,当这个点的祖先与每一棵子树想要互通有无,利用父子边的话,显然会经过此点;另一方面,不想利用父子边的话,不想经过此点的话,就必须利用返祖边了。 在 DFS树之中,子树与子树之间不会有边,所以只需要考虑祖先与子树之间有没有 返祖边。 这也就是说,祖先与每一棵子树之间都有 返祖边 的话,该点就不是关节点;祖先与其中一棵子树之间缺少 返祖边 的话,该点就是关节点。 定义DFS(u)为u在搜索树中被遍历到的次序号。 定义Low(u)为u或u的子树中能通过非父子边追溯到的最早的节点,即DFS序号最小的节点。 一个顶点u是割点,当且仅当: (1) u为树根,且u有多于一个子树。 (2) u不为树根,且满足存在(u,v)为树枝边,使得DFS(u)=Low(v)。 一条无向边(u,v)是桥,当且仅当(u,v)为树枝边,且满足DFS(u)Low(v)。 Low(u)=min { DFS(u) , DFS(v) (u,v)为后向边(返祖边) Low(v) (u,v)为树枝边(父子边) } 算法步骤: [求点双连通分支] 对于点双连通分支,实际上在求割点的过程中就能顺便把每个点双连通分支求出。建立一个栈,存储当前双连通分支,在搜索图时,每找到一条树枝边或后向边(非横叉边),就把这条边加入栈中。如果遇到某时满足DFS(u)=Low(v),说明u是一个割点,同时把边从栈顶一个个取出,直到遇到了边(u,v),取出的这些边与其关联的点,组成一个点双连通分支。 [求边双连通分支] 只需在求出所有的桥以后,把桥边删除,原图变成了多个连通块,则每个连通块就是一个边双连通分支。 例题 3.1 NJUST 194: TWO NODES 2013 南京赛区邀请赛 题意: 给出一个无向图(V,E5000), 问去掉两个点之后,这个图最多变成了几个连通块。 解法: 在求割点的过程中,若dfs树上的某子节点v的low[v]=父节点的dep[u],显然这个点无法与树上的u点之上的点想通,在去掉u点后会断开。 枚举其中一个点,在去掉这个点之后的图中做一次dfs, 算出去掉某个点之后断开的联通块数量。就可以求出去掉两个点之后剩下的联通块数量 例题 3.3 POJ3352:Road Construction 题意: 给一个无向图, 问你需要添加多少条边之后这个图变成双连通分量。 解法: 首先求出所有的桥,然后删除这些桥边,剩下的每个连通块都是一个双连通子图。把每个双连通子图收缩为一个顶点,再把桥边加回来,最后的这个图一定是一棵树,边连通度为1。 具体方法为:首先把两个最近公共祖先最远的两个叶节点之间连接一条边,这样可以把这两个点到祖先的路径上所有点收缩到一起,因为一个形成的环一定是双连通的。然后再找两个最近公共祖先最远的两个叶节点,这样一对一对找完,恰好是(leaf+1)/2次,把所有点收缩到了一起。 统计出树中度为1的节点的个数,即为叶节点的个数,记为leaf。则至少在树上添加(leaf+1)/2条边,就能使树达到边双连通。 Tarjan求SCC 下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强连通分量。 从节点1开始DFS,把遍历到的节点加入栈中。搜索到节点u=6时,DFN[6]=LOW[6],找到了一个强连通分量。退栈到u=v为止,{6}为一个强连通分量。 Tarjan求SCC 返回节点5,发现DFN[5]=LOW[5],退栈后{5}为一个强连通分量。 Tarjan求SCC 返回节点3,继续搜索到节点4,把4加入堆栈。发现节点4向节点1有后向边,节点1还在栈中,所以LOW[4]=1。节点6已经出栈,(4,

文档评论(0)

yaocen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档