图论中的割点、割边、圈和块(黄劲松).ppt

图论中的割点、割边、圈和块(黄劲松).ppt

  1. 1、本文档共83页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图论中的割点、割边、圈和块(黄劲松).ppt

浙江省2006年集训讲义 浙江省2006年集训讲义 图论中的圈与块 图论中的圈与块 绍兴县柯桥中学 黄劲松 基本概念 圈(环) 割点 割边(桥) 块 强连通子图(强连通分量(支,块)) 圈及其相关知识 MST(最小生成树)另类算法 最小环问题 MST另类算法 任意构造一棵原图的生成树,然后不断的添边,并删除新生成的环上的最大边。 水管局长(1) 给定一张带权无向连通图,定义max(p)为路径p上的最大边,min(u,v)为连接u和v的所有路径中,max(p)的最小值。动态的做如下两个操作: 1:询问某两个点之间的min(u,v) 2:删除一条边 你的任务是对于每个询问,输出min(u,v)的值。(WC2006) 水管局长(2) 数据范围约定 结点个数N≤1000 图中的边数M≤100000 询问次数Q≤100000 删边次数D≤5000 水管局长(3) 根据kruskal算法可以知道,最小生成树上的连接两点之间的唯一路径一定是最大边最小的 那么,只要维护一棵图的最小生成树,那么就可以在O(N)的时间内回答每一个min(u,v)的询问 不断的删边然后维护最小生成树? 水管局长(4) 通过删边的形式我们似乎很难维护一张图的最小生成树 根据刚才提到的MST的另类做法,我们反向处理它的每个操作,也就是先删除所有要删的边,然后再逆向添边并回答min(u,v) 于是该问题就可以用另类MST算法解决了 水管局长(5) 这里涉及到一些图与树的存储操作,如何在O(N)的时间内找到环上最大边,并维护一棵最小生成树呢? 如果采取邻接表的存储方式来记录一棵最小生成树,从添加的边的某个点开始遍历整棵树,寻找出环上的最大边,虽然理论复杂度是O(N)的,但是有很多的冗余 水管局长(6) 这里我们采取父亲表示法来存储一棵最小生成树,如图所示: 小H的聚会(1) 给定每个节点的度限制,求在满足所有度限制的条件下的最大生成树。(NOI2005) 这是一道提交答案式的题目,对于后面的几个较大的数据,用另类MST算法对你的解进行调整也能取得不错的效果! 最小环问题 虽然涉及到要求最小环的题目并不多(Ural1004 Sightseeing trip),但是下面介绍的一些求最小环的算法也会对你有一定的启示意义 有向带权图的最小环问题(直接用floyd算法可解) 无向带权图的最小环问题 朴素算法 令e(u,v)表示u和v之间的连边,再令min(u,v)表示,删除u和v之间的连边之后,u和v之间的最短路 最小环则是min(u,v) + e(u,v) 时间复杂度是EV2 一个错误的算法 预处理出任意两点之间的最短路径,记作min(u,v) 枚举三个点w,u,v,最小环则是min(u,w) + min(w,v) + e(u,v)的最小值 如果考虑min(u,w)包含边u-v的情况? 讨论:是否有解决的方法? 改进算法 在floyd的同时,顺便算出最小环 g[i][j]=i,j之间的边长 dist:=g; for k:=1 to n do begin for i:=1 to k-1 do for j:=i+1 to k-1 do answer:=min(answer,dist[i][j]+g[i][k]+g[k][j]); for i:=1 to n do for j:=1 to n do dist[i][j]:=min(dist[i][j],dist[i][k]+dist[k][j]); end; 块及其相关知识 DFS算法 割点 (一般对于无向图而言) 割边 (一般对于无向图而言) 块(一般对于无向图而言) 强连通子图(一般对于有向图而言) DFS算法 1973年,Hopcroft和Tarjan设计了一个有效的DFS算法 PROCEDURE DFS(v); begin inc(sign); dfn[v] := sign; //给v按照访问顺序的先后标号为sign for 寻找一个v的相邻节点u if 边uv没有被标记过 then begin 标记边uv; 给边定向v→u; 如果u被未标记过,记uv为父子边,否则记uv为返祖边 if u未被标记 then DFS(u); end; end; DFS算法 父子边用黑色标记,返祖边用红色标记 如下图,除掉返祖边之后,我们可以把它看作一棵DFS树 割点 G是连通图,v∈V(G),G – v 不再连通,则称v是G的割顶。 求割点的算法 我们通过DFS把无向图定向成有向图

文档评论(0)

克拉钻 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档