图论刘汝佳.ppt

合集下载

动态规划(二) 刘汝佳 黑书 课件 经典

动态规划(二)  刘汝佳 黑书 课件 经典

定理
定理 定理(F.Yao): 若w满足四边形不等式, 则d也 满足四边形形不等式, 即 d[i,j]+d[i',j']<=d[i',j]+d[i,j'], i<=i'<=j<=j' 证明: 对长度i=j'-i归纳, 显然l<=1时正确. i=i' 或j=j'时(同一行或同一列), 等式显然成立
– 情形 i'=j, 退化为反三角不等式 情形1: – 情形 i'<j 情形2:
情形1. 反三角不等式
i'=j时, d[i,j]+d[i',j']<=d[i',j]+d[i,j']退化为 d[i,j]+d[j,j']<=d[i,j'] 设k为让d[i,j']取最小值的决策(有多个时取最 大的一个k, 后同). 若k<=j, 则k是计算d[i,j]考虑过的合法决策 合法决策 d[i,j]<=w[i,j]+d[i,k-1]+d[k,j] 两边加上d[j,j'], 得 d[i,j]+d[j,j']<=w[i,j]+d[i,k-1]+d[k,j]+d[j,j']
决策单调性
进一步地, d的凸性可以推出决策的单调性 设k[i,j]为让d[I,j]取最小值的决策, 下面证明 k[i,j]<=k[i,j+1]<=k[i+1,j+1], i<=j 即: k在同行同列上都是递增的 证明: i=j时显然成立. 由对称性, 只需证明 k[i,j]<=k[i,j+1]. 记dk[I,j]=d[I,k-1]+d[k,j]+w[I,j], 则只需要证明对于所有的i<k<=k'<=j, 有 dk'[i,j]<=dk[i,j] dk'[i,j+1]<=dk[i,j+1]

刘汝佳图结构和基本问题

刘汝佳图结构和基本问题
– 点: 用整数0, 1, 2, …, V-1表示 – 边: 用无序数对(u, v)表示, 或者表示成u-v
边数E不超过V(V-1)/2
图形表示
此二图是同一个图的 不同表示. 图中并不定 义各个结点的位置以 及边的形态(直线?曲 线?), 关键是有哪些 点,哪些点相连 所有边如下表
其他术语
Edge包含u, v两个成员 AdjList支持取beg, nxt和end测试
图IO的ADT
当图需要进行IO的时候,通常需要支持以 下操作
– scanEZ: 读入边列表(顶点用0,1,…V-1表示) – scan: 读入边列表(顶点用符号表示) – show: 输出边列表
基本图问题
和图有关的问题通常有三种
有向图
边都是单向(unidirectional)的, 因此边(u,v)是有序数对. 有 时用弧(arc)专指有向边 在有向边(u, v)中, u和v分别叫
– 源(source)和目的(destination) – 尾(tail)和头(head), 不过和数据结构有冲突
有向无环图(directed acyclic graph, DAG)不是树, 它的基 图(underlying undirected graph)也不一定是树
上面两个图同构, 但不和下面的图同构
路径和圈
一条路径(path)是一个结点序列, 路上的相邻结点 在图上是邻接的. 如果结点和边都不重复出现, 则称为简单路径 (simple path). 如果除了起点和终点相同外没有重 复顶点和边, 称为圈(cycle). 不相交路(disjoint path)表示没有除了起点和终点 没有公共点的路. 更严格地
带权图
可以给边加权(weight), 成为带权图, 或加权图 (weighted graph). 权通常代表费用,距离等, 可 以是正数, 也可以是负数 也可以给点加权, 或者边上加多种权 带权有向图一般也称为网络(network) 带权图的问题多为组合优化问题, 在运筹学中有 广泛应用

第1章图论1(103)PPT课件

第1章图论1(103)PPT课件

且V(H) = V(G),则称H是G的生成子图。
例5
v1
v4
v1
v5
v2
v3
v2
v4
v1
v4
v5
v3
v2
v3
G
H1
H2
上图中,H1与H2均为G 的子图,其中H2 是G的生成子 图,而H1则不是。
四.顶点的度
定义3 设 v为 G 的顶点,G 中与 v 为端点的边的条 数(环计算两次)称为点 v 的度数,简称为点v的 度,记为 dG (v),简记为 d(v)。
终止后,u0 到 v 的距离由 l(v) 的终值给出。
说明:
(1) 算法中w(uiv) 表示边 uiv 的权;
(2) 若只想确定u0到某顶点v0的距 离, 则当某 uj 等于 v0 时则停;
(3) 算法稍加改进可同时得出u0
到其它点的最短路。
例3 求图 G 中 u0 到其它点的距离。
u0 2
5
G:
相应的最短路为
3
1
6
Γ:v2v1v3v4
v3
3
G
v4
易知,各边的权均为1的权图中的路长与非权图中的路长 是一致的。
问题:给定简单权图G = (V, E),并设G 有n个顶点,求G 中点u0到其它各点的距离。
Dijkstra算法 (1) 置 l(u0) = 0;对所有v∈V \{u0},令 l(v) = ∞;
称从 u 到 v 的距离为无穷。
u
例如对图:
w
d (u, v ) = 2
x
其最短路为 uxv
d(u, w) = ∞
v
容易证明对 ,距离具有性质:
(1)d(u, v)≥0;

离散数学——图论PPT课件

离散数学——图论PPT课件
第19页/共93页
• 完全图:一个(n,m)图G,其n个结点中每个结点均与其它n-1个结点相邻接,记为Kn。 • 无向完全图:m=n(n-1)/2 • 有向完全图:m=n(n-1) • 举例说明以上几种图。
第20页/共93页
定义补图
• 设图G=<V,E> , G’=<V,E’> ,若G’’=<V,E∪E’> 是完全图,且E∩E’= 空集,则称G’是G的补图。 • 事实上,G与G’互为补图。
正则图
• 所有结点均有相同次数d的图称为d次正则图。 • 如4阶的完全图是3次正则图,是对角线相连的四边形。 • 试画出两个2次正则图。
第27页/共93页
两图同构需满足的条件
• 若两个图同构,必须满足下列条件: (1)结点个数相同 (2)边数相同 (3)次数相同的结点个数相同
• 例子
第28页/共93页
• 图是人们日常生活中常见的一种信息载体,其突出的特点是直观、形象。图论,顾 名思义是运用数学手段研究图的性质的理论,但这里的图不是平面坐标系中的函数, 而是由一些点和连接这些点的线组成的结构 。
第8页/共93页
• 在图形中,只关心点与点之间是否有连线,而不关心点具体代表哪些对象,也不关 心连线的长短曲直,这就是图的概念。
定义图的子图
• 子图:设G=<V,E> , G’=<V’,E’> ,若V’是V的子集, E’是E的子集,则 G’是G的子图。 • 真子图:若V’是V的子集,E’是E的真子集。 • 生成子图:V’=V,E’是E的子集。 • 举例说明一个图的子图。
第18页/共93页
定义(n,m)图
• (n,m)图:由n个结点,m条边组成的图。 • 零图:m=0。即(n,0)图,有n个孤立点。 • 平凡图:n=1,m=0。即只有一个孤立点。

第十一讲 图论难解问题

第十一讲 图论难解问题
《算法艺术与信息学竞赛》 教学幻灯片
算法图论 第十一讲 图论难解问题
ቤተ መጻሕፍቲ ባይዱ
声明
本系列教学幻灯片属于刘汝佳,黄亮著 《算法艺术与信息学竞赛》配套幻灯片 本幻灯片可从本书blog上免费下载,即使您 并未购买本书. 若作为教学使用,欢迎和作者联系以取得 技术支持,也欢迎提供有不同针对性的修 改版本,方便更多人使用 有任何意见,欢迎在blog上评论 Blog地址:
内容介绍
一,独立集,支配集,团及其他 二,顶点覆盖 三,Hamilton道路和回路 四,旅行商问题 五,色数和色多项式 六,同构
一,独立集,支配集,团及其他

冬令营讲稿_刘汝佳partI

冬令营讲稿_刘汝佳partI
– 情况一:S[j…i]以叶子结尾,则直接在S[i+1]的 标号后增加字符S[i+1]即可 – 情况二:S[j…i]在中间结束,且后一个字符不 是S[i+1],则在该处增加一个分支,连接到一 个新叶子f.该边的编号为S[i+1].如果结束点 在一条边的中间,还需进行边分裂 – 情况三:S[j…i]在中间结束,且后一个字符就 是S[i+1],则什么都不用做
情况1
整棵树没有一点变化!
– 结构显然不变 – 边标号和扩展前完全一样:从k到当前字符
[?,-]
生长点(非结点) 生长点(结点) 普通结点
情况2(a)
[k,-]
生长点(非结点) 生长点(结点) 普通结点
情况2(b)
t [i,j] [k,-] [i,i+t-1] [i+t,j]
生长点(非结点) 生长点(结点) 普通结点
后缀Trie查找举例
4 c a 5 x r a b x b a b x a x P c a c 3 1 c 2 xabxac
c 6
边标记和终结符$
后缀Trie有很多局部链.其实对于查找来说 完全可以把局部链合并成一个结点,这样 既节省空间也缩短查找时间 规定叶子和后缀一一对应,但对于aaaaa...

后缀树的线性时间构造
字符串的集合: Trie 从后缀Trie到后缀树 Ukkonen算法: 思想和简单实现 三阶段定理 完整的Ukkonen算法
字符串的集合: Trie
下图是{he, she, his, hers}的Trie
h
e i
1
r s e 2
s
4
s h
3
Trie的构造和查找(1)
后缀树的构造

第八章图论第13节共173页PPT资料

第八章图论第13节共173页PPT资料
第23页
v1
e4
e1
v2
e2
v4
e5
e3 e6 v3
e7
v6
e8
v5 e9 v7
d(v1)=2,d(v2)=2,d(v3)=4 d(v4)=3,d(v5)=3,d(v6)=2
d(v7)=2
第24页
注:环的顶点的次数为 2 次。
例:
v2
v4
v5
e1
e4
e5
v1
e2
v3
e3
d(v1)=4,d(v2)=2, d(v2)=3,d(v4)=1,d(v5)=0
第25页
2. 悬挂点、悬挂边、悬挂弧 ➢次数为 1 的顶点称为悬挂点。
如上例中的顶点 v4。 ➢无向图中,连接悬挂点的边称为悬挂边。
如上例中的边 e5。 ➢有向图中,连接悬挂点的弧称为悬挂弧。
第26页
例:
v2
v4
v5
e1
e4
e5
v1
e2
v3
e3
d(v4)=1
第27页
3. 孤立点 次数为 0 的顶点称为孤立点。 如上例中的顶点 v5 。
u
e
第18页
有向图 D =( V, A ) 中,弧 a = (u, u) ,即弧的始 点和终点相同,称该弧为环。
u
e
第19页
5. 简单图 无向图中,一个无多重边、无环的无向图,称为 简单图。 有向图中,一个无多重弧、无环的有向图,称为
简单图。
第20页
6. 多重图 无向图中,一个有多重边,但无环的无向图,
4. 奇点 次数为奇数的顶点称为奇点。
如上例中的顶点 v3 和 v4 。
5. 偶点 次数为偶数的顶点称为偶点。 如上例中的顶点 v1 和 v2 。

最新离散数学-图论说课讲解精品课件

最新离散数学-图论说课讲解精品课件
图10.1.7 图G以及(yǐjí)其真子图G 1和生成子图G2
第三十二页,共237页。
第10章 图论(Graph Theory )
的入度, 记d为 ( v ) ;以v为始点的边数称为结点v 的出 度, 记为 d ( v ) 。结点v的入度与出度之和称为结点v
的度数,记为 d(v)或deg(v)。
第二十四页,共237页。
第10章 图论(Graph Theory )
定义: 在无向图中,图中结点(jié diǎn)v所关联 的边数(有环时计算两次)称为结点(jié diǎn)v 的度 数,记为d(v)或deg(v) 。
图 10 .1. 4
第十五页,共237页。
第10章 图论(Graph Theory )
10.1 图的基本概念
完全图:任意两个不同的结点(jié diǎn)都邻接的简单图称为 完全图。n 个结点(jiédiǎn)的无向完全图记为Kn。
图10.1.5给出了K3和K4。从图中可以看出K3有3条边,
K4有6条边。 容易证明Kn有
1.图的定义(dìngyì) 现实世界中许多现象能用某种图形表示,这种图形是由一些 点和一些连接两点间的连线所组成。 【例10.1.1】a, b, c, d 4个篮球队进行友谊比赛(bǐsài)。 为了表示4个队之间比赛(bǐsài)的情况, 我们作出图10.1.1 的图形。 在图中4个小圆圈分别表示这4个篮球队, 称之 为结点。如果两队进行过比赛(bǐsài),则在表示该队的两个 结点之间用一条线连接起来,称之为边。这样利用一个图 形使各队之间的比赛(bǐsài)情况一目了然。
第三页,共237页。
第10章 图论(Graph Theory )
10.1 图的基本概念
如果图 10.1.1中的4个结 点a, b, c, d分别 (fēnbié)表示4个人,当 某两个人互相认识时, 则将其对应点之间用边连 接起来。 这时的图又反 映了这4个人之间的认识 关系。

ACM-ICPC比赛随想——刘汝佳

ACM-ICPC比赛随想——刘汝佳

ACM-ICPC比赛随想——刘汝佳刘汝佳,1982年12月生,毕业于重庆外国语学校,清华大学计算机科学与技术系2005级研究生。

高二时创立“信息学初学者之家”网站(OIBH),高三入选IOI2001国家集训队。

大学一年级时获ACM/ICPC世界总决赛银牌(世界第四),IOI2002/03/04国家集训队指导老师。

曾与黄亮合作出版了《算法艺术与信息学竞赛》丛书,自2002年至今为科学委员会学生委员,在命题方面和辅导学生方面成绩突出,同时兼任NOI网站总监。

从第一次听说ACM/ICPC到现在,已经有快七个年头了。

最开始因好奇而关注,而现在因了解而关注——关注比赛,更关注参加比赛的人。

ACM/ICPC是一个五味瓶。

没有接触过它的人不会知道其中的酸甜苦辣,而一旦置身其中,每个选手都会对它产生一种特殊的感情,时间越长,这种感情也越复杂、越浓烈。

感情来源于对算法与题目的喜爱,来源于对成功的向往和失败的恐惧,来源于各种选择与放弃中的徘徊与摇摆不定,来源于程序世界与现实生活的巨大差异,也来源于通往理想的曲折道路——探索其中时的无助和艰辛。

等到退役的那一天,回过头来再看当时的自己,相信每位选手都会发现自己的很多方面成熟了许多——远不只是编程能力和算法功底。

以前我觉得这是比赛的副产品,而现在我认为这才是比赛的主要目的,至少对于选手自己是如此。

虽然我从心里喜欢这个比赛,但我并不鼓励每个人参加。

并不是每个人在每个时期都适合参加这个比赛,且适合的人选也并不代表一定能取得好成绩——比赛场上是没有“一定”的,任何一个选手都必须有勇气承担风险,就像所有其他有潜在回报的事一样。

另一方面,对于所有下定决心参加比赛的选手,我鼓励他坚持到底,因为只有这样才会受到真正的磨练。

在“参加”与“不参加”的岔路口上,大多数选手被两个问题所困绕。

第一个是“我能获奖么?奖会给我带来什么好处?”,第二个是“抛开荣誉,从比赛中学到的东西值得我花费这么多时间吗?”。

图论刘汝佳

图论刘汝佳

井下矿工
• 有一座地下的稀有金属矿由n条隧道和一些连 接点组成,其中每条隧道连接两个连接点。 任意两个连接点之间最多只有一条隧道。为 了降低矿工的危险,你的任务是在一些连接 点处安装太平井和相应的逃生装置,使得不 管哪个连接点倒塌,不在此连接点的所有矿 工都能到达太平井逃生(假定除倒塌的连接 点不能通行外,其他隧道和连接点完好无 损)。为了节约成本,你应当在尽量少的连 接点安装太平井。你还需要计算出在太平井 的数目最小时的安装方案总数。
void dfs(int u, int fa) { low[u] = pre[u] = ++dfs_clock; int d = G[u].size(); for(int i = 0; i < d; i++) { int w = G[u][i]; // 求BCC用. 每遇到一条边(u,w)都要加到栈中,不管w是否已编号 if(ins[u][w]) continue; ins[u][w] = ins[w][u] = 1; S.push(mp(u, w)); if(!pre[w]){ dfs(w, u); low[u] = min(low[u], low[w]); if(low[w] >= pre[u]) { // u是割顶或者根,意味着一个bcc的终止 ++bcc_cnt; printf("BCC %d, containing (%d,%d):\n", bcc_cnt, u, w); pair<int,int> e; do { e = S.top(); S.pop(); printf("%d %d\n", e.first, e.second); } while(e != mp(u, w)); } } else if(w != fa) low[u] = min(low[u], pre[w]); } }

动态规划(一) 刘汝佳 黑书 课件 经典

动态规划(一) 刘汝佳 黑书 课件 经典
• 为了使用动态规划, 问题需具备最优子结构 (Optimal Substructure)
直接书写的程序
递归树分析
关键点二: 重叠子问题
• 为了让动态规划确实发挥功效, 问题应该包含尽 量多的重叠子问题(overlapping subproblems)
解决方法: 记忆化
• 注意memoization不是memorization
分析
• 设d[i,j]为以j项结尾的i段和的最大值, 则需要 枚举此段开头y和上一段结尾x, 即 d[i,j]=max{d[i-1,x] + a[y..j]} • 每次需要枚举x<y<=j, 决策量为O(n2), 状态 为O(nm), 共O(n3m) • 注意到如果a[j-1]也是本段的, 答案变成为 d[i,j-1]+a[j], 因此方程优化为 d[i,j]=max{d[i,j-1]+a[j], d[i-1,x]+a[j]}, x<j
自底向上递推
空间优化
• 如果只需要最优值, 可以用滚动数组实现 • 按照i递增的顺序计算, d[i,j]只和d[i-1,j]和 d[i,j-1]以及d[i-1,j-1]有关系,因此只需要保 留相邻两行, 空间复杂度为O(min{m,n}) • 更进一步的, 可以只保留一行, 每次用单独 的变量x保留d[i-1,j], 则递推方程为 If(i==j) d[j]=x; else { x = d[j]; d[j]=max{d[j-1], d[j]} };
分析
• 优化后状态仍然是二维的,但决策减少为 O(n), 总O(n2m) • 可以继续优化. 注意到时间主要耗费在对x 的枚举上, 计算max{d[i-1,x]}. 这个值… • 我们把d的第一维称为”阶段”, 则本题是 典型的多阶段决策问题

图论-总结PPT课件

图论-总结PPT课件
q-p+1条弦。 (2) 若G是一个(p,q)连通图,则T至少有多少个圈?(q-p+1) 若G是一个(p,q)连通图,则T有多少个圈? 若G是一个(p,q)连通图,则T至少(多)有多少个生成树?
.
16
第三节 割点、桥和割集
3.1 割点和桥(割边)
定义1 设v是图G的一个顶点,若G-v的支数大于 G的支数,则称顶点v为图G的一个割点(如图)。
degu + degv≥p-1,
则G是连通的。[这个定理是一个充分条件]
定理3 设G=(V,E)是至少有一个顶点不是弧立顶 点的图。若对任意v∈V,degv为偶数,则G中 有回路。
定理4 若图G中的两个不同顶点u与v间有两条不 同的路联结,则G中有回路。
.
6
例1 若G是一个恰有两个奇度顶点u和v的无向图,则 G连通G+uv连通。
.
8
第五节 欧拉图(Euler)
5.1 欧拉图
定义1 设(G,V)是一个图,则包含图的所有顶 点和所有边的闭迹称为欧拉闭迹;存在一 条欧拉闭迹的图称为欧拉图。
定理1 图G是欧拉图当且仅当G是连通的且每 个顶点的度都是偶数。
(定理1对多重图也成立)
.
9
第六节 哈密顿图
6.1 哈密顿图 定义1 设G是一个图,则图G中包含G的所有顶
数称为顶点v的度,记为degv。 定理1 (握手定理)设G=(V,E)是一个具有p个顶点q条边的图,
则G中各顶点度的和等于边的条数q的两倍,即∑degv=2q。 推论1任一图中,度为奇数的顶点的数目必为偶数。
.
3
定义3 设G是图,若Δ(G)=δ(G)=r,即G的每个顶点的 度都等于r,则G称为r度正则图。

图论培训演示课件.ppt

图论培训演示课件.ppt
定理7.7 设非负整数列d=(d1,d2,…,dn),(n-1) ≥d1≥d2≥…≥d n≥0,则d是可简单化的当且仅当d′=(-1,1,…,-1,,…,)。
第7章 图论
7.1.6 子图
定义7.12 设G=<V,E>和G=<V',E'>是两个图, (1)若V'V且E'E,则称G'是G的子图; (2)若G'是G的子图,但V'≠V或E'≠E,则称G'是G的真子图; (3)若G‘是G的子图,且V’=V,则称G‘是G的生成子图或支撑子 图。
定理7.2 设有向图G具有n个结点,m条边,其中结点构成的集
合V={v1,v2,…,vn},则有
n
n
deg (vi) deg (vi ) m
i 1
i 1
第7章 图论
7.1.3 完全图
1.无向完全图
定义7.6 在n阶无向图中,如果任意两个不同的结点之间都有 一条边关联,则称此无向图为无向完全图,记作Kn。
3.竞赛图
定义7.8 设G为n阶有向图,如果G的底图为无向完全图Kn,则称G 为竞赛图。
第7章 图论
7.1.4 图的同构
定义7.9 设图G的点集为V,边集为E,图G′的点集为V′,边集 为E′。如果存在着V到V′的双射函数f,使对任意的u,vV,(u ,v)E(或<u,v>E),当且仅当(f(u),f(v))E′(或<f (u),f(v)>E′),则称图G和G′ 同构,记作GG′。
第7章 图论
7.2 路与回路
7.2.2 图的连通性 1.无向图的连通性 定义7.14 设图G是无向图,u和v是图G中的两个结点,如果u和v 之间有通路,则称u,v是连通的,并规定u与自身是连通的。

2011noi冬令营讲稿刘汝佳

2011noi冬令营讲稿刘汝佳

平面切割多面体(续)
题外话:网格和3D游戏模型
课间休息 + Blender练习
五、凸包(难!)
二维凸包(回顾)
• • • • 卷包裹法 Graham Scan(水平序) 分治算法 Quick Hull
三维凸包
• 输入P:三维空间中的n个点组成的集合 • 输出:P的凸包CH(P),即把所有点包围在内 部或边界上的最小凸多面体
q
n
q’
p0

点到平面的距离(代数推导,3D)
( q q ) || n q q n, R q q n q p0, n 0 (b e c a u s e q is in th e p la n e ) q n p0, n 0 q p0,n n,n 0 p0 q, n || n ||
• 需要计算当压纸器处于稳定位置时芯片离 电脑顶部的最近距离和最远距离。一个位 置被认为是稳定的当且仅当重心向任意方 向移动不超过0.2米压纸器都处于平衡,你 可以认为压纸器密度统一,并且芯片体积 足够小可以被认为是一个点。
Fairies’ Defence (Xi’an 2006, LA 3786)
w
L
co s θ L
L || w ||
v, w || v ||
v
w在v上的投影(projection)
用坐标运算实现点积(2D)
v ( xv , yv )
y
w ( xw , yw ) v , w xv xw yv y w
yw
yv
O
w v xw xv
x
猜一猜,三维情形的公式是怎样的
y Ax+By+C > 0

第6-8章---图论2PPT课件

第6-8章---图论2PPT课件

-
6
8.判别一个二部图中存在完备匹配的相异性条件和t条 件分别是充要条件和充分条件,但t条件对任一二部图能 极容易地进行检验,因而在考虑用较为复杂的相异性条 件之前,可首先用t条件判断,如果t条件不成立,再用相异 性条件判断。
9.图是点(边或面)k-可着色的,是指能用k种颜色给 图的结点(边或面)着色,但k不一定是最少的颜色数。 图是点(边或面)k-色的,是指最少要用k种颜色绘图 的结点(边或面)着色。平面图的面着色问题一般化 为对其偶图的点着色问题。Welch-Powell算法是近似 算法,它给出的结点着色的颜色数不一定是最少的, 而是较少的。
6.掌握最小点覆盖、最小边覆盖、最大点独立集、最 大边独立集(匹配)、最大匹配、完美匹配、完备匹 配、可增广路径等概念,能够利用相异性条件和t条件
-
2
判定二部图中是否存在完备匹配,了解可增广路径求 完备匹配的方法和思想。
7.掌握结点着色、边着色、面着色等概念及有关性质, 能够用Welch—power算法确定一个使图的颜色数尽可 能少的结点着色。
数目。
3.掌握求图中某个结点到其他任一结点的最短路径的 Dijkstra算法,以及求图中任意两个结点的最短路径的
-
1
Warshsll算法。
4.掌握欧拉图和哈密尔顿图的概念及其判别方法,能 够利用fleury
算法求欧拉回路,了解邮路问题,能够用近邻法求哈 密尔顿回路。
5.掌握平面图、面、边界、极大平面图、同胚等概念 及有关性质,能够判定一个图是否为平面图。
-
7
§6.3基本题
§6.3.1选择题
1.设D=<V,E>为有向图,则有(
A. E ∈ V*V
B.EV*V

线段树_刘汝佳(有版权)

线段树_刘汝佳(有版权)

SUM的计算
• 右图表示影响 SUM(7, 9)的所 有区间
– 影响全部: [1,9], [5,9], [7,9] – 影响部分: 7, [8,9], 8, 9
[1,2] 1 2 [1,9] [1,4] [3,4] 3 4 [5,9] [5,6] 5 6 [7,9] 7 [8,9] 8 9
完整的算法
– 得到讨论区间(可能要先离散化) – 设计区间附加信息和维护/统计算法
• 线段树自身没有任何数据, 不像BST一样有 一个序关系 • 警告 想清楚 警告: 想清楚附加信息的准确含义 不能有 准确含义, 准确含义 半点含糊! • 建议 先设计便于解题 建议: 便于解题的附加信息,如果难 便于解题 以维护就加以修改
[3,4]
5 3 3 5 5 1 1
[4,5]
5 3 3 5
1 2 2 3 3 4 4 5
1 2 2 3 3 4 4 5
1 2 2 3 3 4 4
1 2 2 3 3 4 4 5
矩形树
• 每个矩形分成四份
– 空间复杂度:XY – 时间复杂度:X+Y
(x2,y2) (1,1)
(4,3)
Son1
Son2
– ADD: 给i对应结点的所有直系祖先s值增加k – SUM: 做区间分解, 把对应结点的s值相加
动态统计问题II
• 包含n个元素的数组A
– ADD(i, j, k): 给A[i], A[i+1], … A[j]均增加k – QUERY(i): 求A[i]
• 先看看是否可以沿用刚才的附加信息
– QUERY(i)就是读取i对应的结点上的s值 – ADD呢? 极端情况下, 如果是修改整个区间, 则 所有结点都需要修改!
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

low函数本身的计算
void dfs(int u, int fa) { // u的父亲结点是fa,初次调用fa=-1 low[u] = pre[u] = ++dfs_clock; // 初始化low(u) int d = G[u].size(); for(int i = 0; i < d; i++) { // 枚举每条边(u,w) int w = G[u][i]; if(!pre[w]){ // 没有访问过点v(所有pre值初始化为0)
定理的证明
• u存在一个儿子w,使得w及其所有后代都没 有反向边连回u的祖先(连回u不算)。
• 为了方便起见,我们设low(u)为u及其后代 所能连回的最早的祖先的pre值,则定理中 的条件就可以简写成:结点u存在一个儿子 w,使得low(w)>=pre(u)。若low(w)>pre(u), 即w最多只能连回自己,则只需删除(u,w)一 条边就可以让图G非连通了。满足这个条件 的边称为桥(bridge)
– 第二步:计算G的转置GT(即把所有有向边(u,v) 变为有向边(v,u))
– 第三步:对GT进行DFS,其中主循环中按下标从 小到大的顺序依次考虑list中的各个结点,则每 次dfs将会得到一个不同的SCC。
圆桌骑士
• 每次圆桌会议由至少3个骑士参加,骑士的 数目必须为奇数,且在圆桌旁坐下后相邻 骑士不能相互憎恨。统计有多少个骑士不 可能参加任何一个会议。
// 求BCC用. 每遇到一条边(u,w)都要加到栈中,不管w是否已编号 if(ins[u][w]) continue; ins[u][w] = ins[w][u] = 1; S.push(mp(u, w)); if(!pre[w]){ dfs(w, u); low[u] = min(low[u], low[w]); if(low[w] >= pre[u]) { // u是割顶或者根,意味着一个bcc的终止
++bcc_cnt; printf("BCC %d, containing (%d,%d):\n", bcc_cnt, u, w); pair<int,int> e; do { e = S.top(); S.pop(); printf("%d %d\n", e.first, e.second); } while(e != mp(u, w)); } } else if(w != fa) low[u] = min(low[u], pre[w]); } }
– 点-双连通的等价条件:任意两点存在两条“点 不重复”的路径。这个要求等价于任意两条边 都在同一个简单环中,因此内部无割顶。
– 边-双连通的等价条件:任意两点存在两条“边 不重复”的路径。这个要求要低一点,只需要 每条边都至少在一个简单环中,因此所有边都 不是桥。
点/边-双连通分量
• 下图有两个点-双连通分量:{1,2,3}和{3,4,5}, 但只有一个边-双连通分量:{1,2,3,4,5}。
dfs(w, u); // w的父亲结点是u low[u] = min(low[u], low[w]); // 用后代的low函数更新 } else if(w != fa) low[u] = min(low[u], pre[w]); // 用反向边更新 } }
双连通与边-双连通
• 如果一个无向连通图没有割顶,称它是点双连通的,一般简称双连通 (biconnected);如果没有桥,称它是边双连通(edge-biconnected)的。
一些图论算法
刘汝佳
目录
• DFS相关算法 • 二分图相关算法 • 网络流相关算法 • 最小树形图
DFS相关算法
基本应用
• 找连通分量 • 二分图判定 • 无向图的连通性 • 有向图的连通性
时间戳和边分类
• 时间初始化为0,最大值为2|E|。数值本身 无意义,但大小关系有意义
void PREVISIT(int u) { pre[u] = ++dfs_clock; } void POSTVISIT(int u) { post[u] = ++dfs_clock; }
有向图的强连通分量
• 理想情况:依次从I, C, D…出发DFS,则每次 DFS恰好得到一个SCC
Kosaraju算法
• 执行两次DFS,其中第一次DFS得到了关于 各个SCC拓扑顺序的有关信息,而第二次 DFS按照这个拓扑顺序的逆序进行DFS,从 而把每个SCC分开。
– 第一步:对G进行普通的DFS,把各个结点按照 访问结束时间从后往前的顺序放入列表list中。
• 有n个骑士,m个相互憎恨的骑士对 • N<=1000, m <= 1000000
• 以骑士作为顶点建立无向图G。如果两个骑 士不相互憎恨,在他们之间连一条无向边。
则题目转化为求不在任何一个奇圈上的顶 点个数。如果图G不连通,应对每个连通分 量分别求解。下面假设图G连通。
• 假设结点v在某个奇圈上,则根据定义,该 圈上的所有结点都属于同一个点-双连通分 量。由于该双连通分量中含有奇圈,它一
无向图:只有树边和反向边
无向连通图的割顶
• DFS森林一定只有一棵树。树根是不是割顶 呢?不难发现,当且仅当它有两个或更多 的儿子时,它才是割顶——无向图只有树边 和反向边,不存在跨两棵子树的边。对 于其他点,情况就要复杂一些。我们有下 面的定理:
• 定理:在无向连通图G的DFS树中,非根结 点u是G的割顶当且仅当u存在一个儿子w, 使得w及其所有后代都没有反向边连回u的 祖先(连回u不算)。
算法
• 边-双连分量:两步走,先求出所有的桥, 然后再做一次dfs染色。因为边-双连通分量 是没有公共顶点的,所以只要在第二次dfs 的时候保证不经过桥即可。
• 点-双连通分量:Tarjan算法(见后)
void dfs(int u, int fa) { low[u] = pre[u] = ++dfs_clock; int d = G[u].size(); for(int i = 0; i < d; i++) { int w = G[u][i];
相关文档
最新文档