- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[2018年最新整理]《关键边(KeyEdge)》解题报告
《关键边(Key Edge)》解题报告
安徽 周源
摘要
算法 动态维护树+最近公共祖先查询 时间复杂度 O(NlogN + M + QlogN) 空间复杂度 O(N + M) 问题描述
写一个程序,读入一个无向的连通图的信息,图中两点间可以有多条边,可以有边的两个端点相同。程序需要处理以下两种命令:
删除图中一条边(保证边存在,删除后仍保证图是连通的)
询问图中两个点a和b之间的关键边有多少个(所谓关键边,即若删除了这条边,a和b就无法互相到达)
输入格式:
输入文件第一行有三个整数N, M和Q,分别表示图中顶点个数,边的个数和需要执行的命令个数,图中节点的编号为1…N
接下来M行,每行两个整数描述图中的一条边
接下来Q行,每行描述一条命令:
1 a b:表示删除图中的边(a, b)
2 a b:表示询问图中a到b路径上关键边的数目
输出格式:
对于每一次询问,你的程序都需要向输出文件输出一行:a和b间关键边的数目
数据规模:
1 ≤ N ≤ 3 * 104
1 ≤ M ≤ 105
1 ≤ Q ≤ 105
分析
这是我为今年安徽省省赛出的一道备选试题,;因此在2005年5月26日前保密(。
初步分析
本题的输入涉及到两类操作,一是删除某条边,一是询问关键边数目。
我们先来看一个简单一些的问题:如果没有删边操作,而只是给出一幅图,不停地询问某两点间关键边的数目,该如何设计高效的算法?
[定理1]任意两点a和b间的关键边集合,等于a到b任意一条路径与整个图的关键边集合的交集。
[证明]不妨设a和b间关键边的集合为C,整幅图的关键边集合为K,而存在某一条a至b的路径P。
分析任意一条边e ∈ C,由于删去了e,a和b就不连通了,那么显然整个图也就不连通了,因此e ∈ K,而既然e是a到b的关键边,说明从a到b必然经过e,所以有e ∈ P。故:
任意e ∈ C ( e ∈ K∩P
即:
C K∩P (1)
而另一方面,对于任何e ∈ K∩P,设e的两个端点为u和v:在路径P上,从a出发,先到达u,然后穿过e,从v到达b。由于e是图中的关键边,删除e以后整幅图会分裂成为两个部分:一部分含有u节点,一部分含有v。若在分裂后的图中a和b仍然连通,可知:a与u存在一条不含e的路径,因此连通,同样b和v连通,故u和v连通,导出矛盾。因而a和b在删除e以后必然不连通,即
任意e ∈ K∩P ( e ∈ C
K∩P C (2)
综合(1)式和(2)式,得
C = K∩P
故[定理1]成立。
由[定理1]可知,任意两点间的关键边与整幅图的关键边都有密切的关系。因此不妨先求出图的关键边:根据图论知识可知,一幅图中的关键边连接的都是不同的块,如果将图中的一个个块收缩成节点(或是说看成节点),则任意两个块之间的路径上的边都是关键边,由关键边的性质:任意两个块之间有且仅有一条路径,即收缩后的图是一棵树,不妨称之为关键边树。
根据[定理1],两点间的关键边集合等于两点间任意路径和整幅图关键边集的交。因此不难发现,若找到a和b所属的块A和B,那么在关键边树上A到B的唯一路径上的边都是a到b的关键边,即我们要求的关键边数目就是关键边树上A到B的路径长度:如下图中的红色边所示。
那么目前问题的关键在于如何求树上两点间的距离:不妨任选一个点R作为根,将这棵树变成一棵有根树后,可以确定每一个点的深度:DepthA,DepthB等等。
不难看出A到B的路径一定是从A开始,先向上走到A和B的最近公共祖先:
C = LCA(A, B)
接着再从C向下沿着树上边走到B。
那么前一段的路径长度为DepthA – DepthC,而后一段路径长度则为DepthB – DepthC,因此A到B的路径长度则为:
DepthA + DepthB – 2 * DepthC
由于询问LCA可以在O(nlogn)的时间内与处理,并做到O(1)的询问。
因此对于这个子问题,我们可以做到O(m + nlogn)的预处理,以及O(1)的询问。其中O(m)的预处理是求出图中的块,构造关键边树。
深入思考
回到原先的问题中,如何让我们的算法支持删除操作呢?由于本题并没有要求我们的算法支持联机操作,因此我们可以设计这样的脱机算法:先将所有的边都删除,然后反向执行所有的操作:遇到询问就打印结果,而遇到删除操作,我们要做的则是向图中加上一条边!
因此现在我们的算法需要支持的操作是插入,而不是删除——看上去这样会简单一些(。
在询问时我们需要知道的两个量:Depth和LCA函数,在每加入一条边的时候,我们就需要维护手中的关键边树,以及与树有关的这两个量。
如上图所示,假设在图中插入了一条边e(a, b),我们首先找到a和b分别所在的块A和B。那么实际上即可以理解为在手头的关
您可能关注的文档
- [2018年最新整理]§7-3—傅里叶变换的性质.ppt
- [2018年最新整理]§6线性变换的值域与核.ppt
- [2018年最新整理]§6指数函数、幂函数、对数函数增长的比较.ppt
- [2018年最新整理]§8-3职业心理素质与我.ppt
- [2018年最新整理]§80数制-教案2.doc
- [2018年最新整理]§9-4装配图中零、部件的序号和明细表.ppt
- [2018年最新整理]§9-5刚架的整体刚度矩阵.ppt
- [2018年最新整理]§Gauss公式.ppt
- [2018年最新整理]§Green公式.ppt
- [2018年最新整理]§P15正定二次型与对称正定矩阵.ppt
- [2018年最新整理]《冀教版初中数学公式归纳汇总》.doc
- [2018年最新整理]《农业机械化管理统计报表制度》修订说明.doc
- [2018年最新整理]《凝固过程数值模拟》大作业-京江09.doc
- [2018年最新整理]《几何与代数》科学出版社习题解析第一章.ppt
- [2018年最新整理]《几何与代数》科学出版社第一章行列式和线性方程组的求解2.ppt
- [2018年最新整理]《几何与代数》科学出版社第一章行列式和线性方程组的求解3.ppt
- [2018年最新整理]《出境入境管理法》知识问答(70问).doc
- [2018年最新整理]《函数》第一课时教案.doc
- [2018年最新整理]《再别康桥》.ppt
- [2018年最新整理]《函数复习课》ppt课件.ppt
文档评论(0)