图论算法-割点、割边应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Example
net.in 9 10 3 4 2 4 5 4 9 8 3 1 2 4 1 2 3 4 2 1 5 5 6 6 7 6 8 7 9 8 7
net.out 3 3 2 5 6 7 9
分析
• 这题,很显然是求桥,但是这个桥有不同之 处,并不是只要图不连通就可以了.由题意 可知这些边一定是桥,但是桥不一定是这 些边. • 要是某些点得不到某种服务,那么就是要 求在其连通块中该没有服务的点.
Leabharlann Baidu
分析
• 所以在实现时只要在判断是否是割点时加 入这个判断语句就可以了.
CEOI2005(关键网线问题 ) 关键网线问题
(Critical Network Lines )
Input file: net.in Output file: net.out Source code: net.pas/.c/.cpp
100 points Time limit: 3 sec Memory limit: 64 MB
问题描述
• 考虑这样一个通讯网络,它由一些结点和连接结点之间 考虑这样一个通讯网络, 的双向网线组成。 的双向网线组成。已知该连通网络的每对结点之间都存 在一条信息流通网路。 在一条信息流通网路。 • 一些结点向所有结点(包括自己)提供A服务,同时一 一些结点向所有结点(包括自己)提供 服务 服务, 些结点也向所有结点提供B服务 服务。 些结点也向所有结点提供 服务。同一个结点有可能同 时提供这两种服务。每个结点都应当能得到这两种服务。 时提供这两种服务。每个结点都应当能得到这两种服务。 • 如果有一根网线出现问题,可能导致某个结点无法获得 如果有一根网线出现问题, 某个服务,具备这种性质的网线就称为关键网线 关键网线。 某个服务,具备这种性质的网线就称为关键网线。
• 这个很显然,因为对于一棵子树,如果与 其连通,那么就都会遍历到,不然就回溯 至其祖先。
算法
• 那么在DFS的时候,我们纪录每个儿子子 树,与其相连的最高的祖先的层号,如果 这个层号>=其父亲的层号,那么删掉这个 父亲结点后这棵子树将于其祖先不连通.
• 如果这个层号>其父亲的层号,那么删掉这 条连接父亲的边,那么这棵子树将于其祖 先不连通.
概念
• 如果一张无向连通图,在删掉某些点集后 这张图就不连通,而删掉这个集合的任意 一个真子集,这张图任就是连通的,那么 就称这个点集为点割集,如果一个结点就 是点割集,那么就称这个结点为割点
概念
• 如果一张无向连通图,在删掉某些边集后 这张图就不连通,而删掉这个集合的任意 一个真子集,这张图任就是连通的,那么 就称这个点集为边割集,如果一个结点就 是点割集,那么就称这个结点为割边或桥
任务目标
• 编一段程序,找出关键网线数 编一段程序, (TaskA)以及 ) 连接这些网线的两端结点(结点对) 连接这些网线的两端结点(结点对) (TaskB)。 )。
输入数据
• 文件 文件net.in的第一行包含 个整数: 的第一行包含4个整数 的第一行包含 个整数: 总的结点数N 总的结点数 (1 ≤ N ≤ 100 000), , 连接的网线数 M (1 ≤ M ≤ 1000 000), , 提供A服务的结点数 提供 服务的结点数 K (1 ≤ K ≤ N), , 提供B服务的结点数 (1 ≤ L ≤ N)。 提供 服务的结点数L 。 服务的结点数 • 第二行是 个整数,标明提供A服务的结点。。 第二行是K个整数,标明提供 服务的结点 服务的结点。 个整数
输入文件
• 第三行是 个整数,标明提供B服务的结点。 第三行是L个整数,标明提供 服务的结点 服务的结点。 个整数 • 接下来的M行表示网线的连接位置,每行有两 接下来的 行表示网线的连接位置, 行表示网线的连接位置 个整数p 个整数 q (1 ≤ p, q ≤ N, p ≠ q),是网线两端的结 , 点。 • 任意两个结点之间,最多有一条网线相连。 任意两个结点之间,最多有一条网线相连。
First
• 首先我们必须明白一点,关於图的DFS的性质, 我们对图进行DFS遍历,DFS本身是没有什么作 用,只用来求连通块,而我们利用的是DFS的 遍历顺序。 • DFS遍历出来的一棵树满足一个特点:对于一 个结点的任意两个以其儿子结点为根的子树, 必须通过这个结点或者其祖先才能连通,也就 是说,在删掉这个结点后,任意两棵以其儿子 为根的子树都不互相连通。
图论算法-割点、 图论算法-割点、割边
~a piece of cake~
引题
• 我们常常碰到一些求删某条边使其图不连 通,或点。如ZJ.PTSC2004的《嗅探器》, 如KOJ上的《消息不可走漏》,虽然我们 都可以用暴力来解决,但是这个时间复杂 平方级别的,一但数据范围扩大,这个就 无法解决了。 • 其实这个是有线性算法。
算法
• 那么这个算法也就出来了,只需在DFS时加 入求和其相连的最高祖先的语句就行了
消息不可走漏(KOJ 1047)
Description
• 玛莉得知公主被虏走的消息,决定前去营救,所以这个 消息坚决不能够被敌人知道了,因为敌人一但得知,告 知了每个堡垒后,营救工作一定会非常困难的!! 玛莉窃取了一分地图,里面记载了敌人的n座堡垒,某 些堡垒之间修筑了公路。任意两个堡垒都可以通过公路 直接或者间接到达。玛莉发现有些公路被毁坏之后会造 成某两个城市之间无法互相通过公路到达。只要炸掉这 样的一条公路,玛莉就可以完成他的第一步救援计划了。 但是,要在短时间内找出来,这是个多么难的问题呀, 所以现在玛莉求助于你,希望你能够通过编程,在1秒 中内找出这样的公路来。
输出文件
• 文件 文件net.out的第一行是关键网线的数目 的第一行是关键网线的数目S 的第一行是关键网线的数目 (TaskA)。 )。 • 接下来的 行各含一对整数p q (1≤ p, q ≤ 接下来的S行各含一对整数 行各含一对整数 N),分别定义了一条关键网线(TaskB) ,分别定义了一条关键网线( ) • 关键网线可以按任意顺序输出。每一条关 关键网线可以按任意顺序输出。 键网线的两个端点也可按任一顺序输出。 键网线的两个端点也可按任一顺序输出。
分析
• 这题是一题割边的应用,当然用复杂度再 高点的算法也可以. • 这题的算法就是割边,是练习割边的基础 题.
嗅探器(PTSC.ZJ04) 嗅探器
嗅探器
• 某军搞信息对抗实战演习.红军成功地侵入了蓝 军的内部网络.蓝军共有两个信息中心.红军计划 在某台中间服务器上安装一个嗅探器,从而能够 侦听到两个信息中心互相交换的所有信息.但是 蓝军的网络相当的庞大,数据包从一个信息中心 传到另一个信息中心可以不止有一条通路.现在 需要你尽快地解决这个问题.应该把嗅探器安装 在哪个中间服务器上才能保证所有的数据包都 能被捕获?
分析
• 这题显然是求割点,但是这个割点有些不 同,这个点割掉只能使a,b不连通,那么怎么 做呢? • 显然这题可以用暴力枚举来实现,复杂度 虽然大,但是这题的范围不大,所以还是可 以做的
分析
• 那怎么用割点来实现呢? • 很显然问题要求的点一定是这张图的割点,但是 割点并不都是这个问题要求的点. • 我们通过观察割点算法,如果纪录在当前子树是 否有a,或者b. • 那么这些点也就很容易描述了:这个点是割点,且 A Xor B
• 于是我们只需要在求桥的基础上加上 • (Suma=na)or(Suma=0)or(Sumb=0)or(Sumb =nb) • 就可以了
• 于是算法也就是在求桥的基础上加上这个 判断条件,和求Suma,Sumb的值.
Thank You For Eveything
相关文档
最新文档