强连通分支、桥和割点

合集下载

连通图的割点、割边(桥)、块、缩点,有向图的强连通分量

连通图的割点、割边(桥)、块、缩点,有向图的强连通分量

连通图的割点、割边(桥)、块、缩点,有向图的强连通分量一、基本概念无向图割点:删掉它之后(删掉所有跟它相连的边),图必然会分裂成两个或两个以上的子图。

块:没有割点的连通子图割边:删掉一条边后,图必然会分裂成两个或两个以上的子图,又称桥。

缩点:把没有割边的连通子图缩为一个点,此时满足任意两点间都有两条路径相互可达。

求块跟求缩点非常相似,很容易搞混,但本质上完全不同。

割点可以存在多个块中(假如存在k个块中),最终该点与其他点形成k个块,对无割边的连通子图进行缩点后(假设为k个),新图便变为一棵k个点由k-1条割边连接成的树,倘若其中有一条边不是割边,则它必可与其他割边形成一个环,而能继续进行缩点。

有割点的图不一定有割边,如:3是割点,分别与(1,2)和(4,5)形成两个无割点的块有割边的图也不定有割点,如:w(1,2)为割边,有向图强连通分量:有向图中任意两点相互可达的连通子图,其实也相当于无向图中的缩点二、算法无向图借助两个辅助数组dfn[],low[]进行DFS便可找到无向图的割点和割边,用一个栈st[]维护记录块和“缩点”后连通子图中所有的点。

dfn[i]表示DFS过程中到达点i的时间,low[i]表示能通过其他边回到其祖先的最早时间。

low[i]=min(low[i],dfn[son[i]])设 v,u之间有边w(v,u),从v->u:如果low[u]>=dfn[v],说明v的儿子u不能通过其他边到达v的祖先,此时如果拿掉v,则必定把v的祖先和v的儿子u,及它的子孙分开,于是v便是一个割点,v和它的子孙形成一个块。

如果low[u]>dfn[v]时,则说明u不仅不能到达v的祖先,连v也不能通过另外一条边直接到达,从而它们之间的边w(v,u)便是割边,求割边的时候有一个重边的问题要视情况处理,如果v,u之间有两条无向边,需要仍视为割边的话,则在DFS的时候加一个变量记录它的父亲,下一步遇到父结点时不扩展回去,从而第二条无向重边不会被遍历而导致low[u]==dfn[v] ,而在另外一些问题中,比如电线连接两台设备A,B 如果它们之间有两根电线,则应该视为是双连通的,因为任何一条电线出问题都不会破坏A和B之间的连通性,这个时候,我们可以用一个used[]数组标记边的id,DFS时会把一条无向边拆成两条有向边进行遍历,但我们给它们俩同一个id号,在开始遍历v->u前检查它的id是否在上一次u->v 时被标记,这样如果两点之间有多条边时,每次遍历都只标记其中一条,还可以通过其他边回去,形成第二条新的路求割点的时候,维护一个栈st 每遍历到一个顶点v则把它放进去,对它的子孙u如果dfn[u]为0,则表示还没有遍历到则先DFS(u),之后再判断low[u]和dfn[v],如果low[u]>=dfn[v],则把栈中从栈顶到v这一系列元素弹出,这些点与v 形成一个块,如果u的子孙x也是一个割点,这样做会不会错把它们和v,u放在一起形成一个块呢,这种情况是不会发生的,如果发现x是一个割点,则DFS 到x那一步后栈早就把属于x的子孙弹出来了,而只剩下v,u的子孙,它们之间不存在割点,否则在回溯到v之前也早就提前出栈了!画一个图照着代码模拟一下可以方便理解。

《离散数学》图的基本概念-2

《离散数学》图的基本概念-2
记 Gv: 从G中删除v及关联的边 GV: 从G中删除V中所有的顶点及关联的边 Ge : 从G中删除e GE: 从G中删除E中所有边
定义 设 无 向 图 G=<V,E>, 如 果 存 在 顶 点 子 集 VV, 使 p(GV)>p(G),而且删除V的任何真子集V后( VV), p(GV)=p(G), 则称V为G的点割集. 若{v}为点割集, 则称v 为割点. 理解:删除点后连通分支数可能增加,会减少吗?
14
7.3 图的矩阵表示
无向图的关联矩阵 有向图的关联矩阵 有向图的邻接矩阵 有向图的可达矩阵
15
无向图的关联矩阵
定义 设无向图G=<V,E>, V={v1, v2, …, vn}, E={e1, e2, …, em}, 令mij为vi与ej的关联次数,称(mij)nm为G 的关联矩阵,记为M(G).
7.2 通路、回路与图的连通性
简单通(回)路, 初级通(回)路, 复杂通(回)路 无向连通图, 连通分支 弱连通图, 单向连通图, 强连通图 点割集与割点 边割集与割边(桥)
1
通路与回路
定义 给定图G=<V,E>(无向或有向的),设G中顶点与边的交
替序列=v0e1v1e2…elvl:
1 0 0 1 2 0 0 0 0 0
17
无向图的相邻矩阵
v1 e1
e2
e3
e4 v2
i j
aij +2
n i 1
v3 v4
0 1 1 0
A(G) 1 0 1 0 1 1 1 1 0 0 0 0
e5
(1)相邻矩阵是对称矩阵。 (2)对角元素aii≠0,表示结点vi处有环。 (3)如aij >1,表示vi与vj间有平行边。

连通分支的定义

连通分支的定义

连通分支的定义一、引言连通分支是图论中的一个重要概念,用于描述图中的连通性。

在图中连接在一起的节点构成一个连通分支。

在本文中,我们将详细讨论连通分支的定义、性质以及如何在图中找到连通分支,旨在帮助读者更深入地了解和理解这一概念。

二、定义连通分支是指图中的节点集合,其中的任意两个节点之间都存在一条路径。

换句话说,对于连通分支中的任意两个节点,我们可以通过边来沿路径相互到达。

连通分支是图中的一个最大连通子图,因为它包含了图中所有可以通过路径相互到达的节点。

三、性质连通分支具有以下性质:1. 最大性质连通分支是一个最大连通子图,即它不包含在其他的连通分支中。

换句话说,如果我们将连通分支中的任意一个节点添加到该分支外的节点中,将会破坏连通性。

2. 无向图中的连通分支对于无向图而言,连通分支是无向图中的极大连通子图。

一个无向图可以包含多个连通分支,每个连通分支都是一个独立的连通子图。

3. 有向图中的连通分支对于有向图而言,连通分支是有向图中的极大强连通子图。

强连通子图是指其中的所有节点之间互相可达,即对于连通分支中的任意两个节点,存在一条有向路径可以从一个节点到达另一个节点。

四、寻找连通分支的算法在图中寻找连通分支的算法是一项基本的图算法,下面介绍两种常见的算法:广度优先搜索(BFS)和深度优先搜索(DFS)。

1. 广度优先搜索(BFS)广度优先搜索是一种用于遍历或搜索图中节点的算法。

它从一个起始节点开始,逐层地遍历其邻接节点,直到遍历完所有连通的节点。

在遍历过程中,我们可以记录下每个连通分支的节点。

以下是广度优先搜索的基本步骤: 1. 创建一个队列,并将起始节点放入队列中。

2. 从队列中取出一个节点,并标记为已访问。

3. 遍历该节点的所有邻接节点,并将未访问的邻接节点放入队列中。

4. 重复步骤2和步骤3,直到队列为空。

5. 如果还存在未访问的节点,重复步骤2到步骤4。

2. 深度优先搜索(DFS)深度优先搜索也是一种用于遍历或搜索图中节点的算法。

连通分支等概念深刻理解无向图的点割集和边割集

连通分支等概念深刻理解无向图的点割集和边割集
2
证:(反证法)设结论不成立,即存在
v V , (G-v) 1 d(v)
2
因为G是连通的,所以G-v的每个分支都至少有
一个点与v相邻接,而且存在一个分支,其与v相邻接
的点w只有一条边与v相连(因为如每个分支中有二个
以上的点与v相连,则 d(v) 2(G-v) d(v) ,出现矛
2019/12/23
计算机学院
2
5. 深刻理解无向图的连通性,连通分支等概念 6. 深刻理解无向图的点割集和边割集、点连通
度、边连通度等概念及其之间的关系,并能 熟练地求出给定的较为简单的图的点割集和 边割集、点连通度与边连通度 7. 深刻理解有向图连通性的概念及其分类,掌 握判断有向连通图类型的方法 8. 深刻理解有向图的邻接矩阵、可达矩阵的基 本概念
25
………
w
………
v
2019/12/23
计算机学院
26
30、解:
v1 e1 v2
e2
v3
e7
e3 e5
e6 v5
e4
v4
e8
v6
e9
e11
e12
e10
v7
v1 v2 v3 v4 v5 v6 v7
0 1 1 0 0
0
0

0 0 0 1 0 0 0

A

0 1

0 011 0101

m

n(n 1 ) 2

C
2 n
2019/12/23
计算机学院
16
4、证:
由欧拉定理,2m d(v)
vG
d(v)
vG vG

考研数学知识点总结

考研数学知识点总结

考研数学知识点总结一、高等数学1. 极限与连续极限:数列极限、函数极限、无穷极限、极限的性质和运算法则连续:函数连续性、连续函数的性质、间断点、闭区间连续性定理2. 导数与微分导数的概念:函数的导数、导数的性质微分:函数的微分、微分的性质、高阶微分3. 微分方程微分方程的解法:可分离变量、一阶线性微分方程、二阶线性微分方程微分方程的应用:常微分方程的物理应用、生物应用、经济应用4. 重积分二重积分:累次积分、极坐标系下的二重积分三重积分:累次积分、柱坐标系、球坐标系下的三重积分5. 线性代数行列式与矩阵:行列式的性质、矩阵的性质和运算线性方程组:线性方程组的解法、线性方程组的应用特征值与特征向量:矩阵的特征值和特征向量、对角化、相似矩阵二、离散数学1. 集合与命题逻辑集合:集合的基本概念、集合的运算、集合的应用命题逻辑:命题的联结词、等值命题、蕴含命题、充分必要条件2. 图论图的基本概念:图的定义、图的性质、图的应用连通性:连通图、强连通图、连通度、割点、桥图的着色问题:平面图的着色、四色定理3. 组合数学排列组合:排列、组合、二项式定理生成函数:普通生成函数、指数型生成函数容斥原理:二项式系数的应用、排列组合的应用4. 概率论随机事件与概率:随机试验、随机事件的概率、概率的性质随机变量与概率分布:随机变量的概念、离散型随机变量、连续型随机变量随机过程:马尔可夫链、泊松过程、布朗运动三、数学分析1. 泛函分析赋范空间:线性空间的内积、希尔伯特空间的定义线性算子:紧算子、自共轭算子巴拿赫空间:巴拿赫空间的性质和定理2. 复变函数复数和复变函数:复数的基本性质、复变函数的连续性和可导性积分定理:柯西积分定理、留数定理解析函数:正实部函数、调和函数、齐纯函数3. 实变函数度量空间:度量空间的性质、完备度量空间勒贝格积分:勒贝格积分的性质、勒贝格积分的应用广义积分:广义积分的收敛性、绝对收敛四、概率论与数理统计1. 随机变量随机变量的概念:离散型随机变量、连续型随机变量、随机变量的分布函数随机变量的数字特征:数学期望、方差、协方差2. 大数定律与中心极限定理大数定律:切比雪夫不等式、辛钦大数定律、伯努利大数定律中心极限定理:林德贝格-列维中心极限定理、中心极限定理的其他形式3. 参数估计与检验参数估计:点估计、区间估计假设检验:假设检验的基本思想、参数假设检验方差分析:单因素方差分析、双因素方差分析五、数理逻辑与模糊数学1. 数理逻辑命题逻辑:命题的联结词、等值命题、蕴含命题、充分必要条件谓词逻辑:一阶谓词逻辑、量词、谓词逻辑的推理规则2. 模糊数学模糊集合:模糊集合的基本概念、模糊集合的运算模糊关系:模糊关系的合成、模糊关系的反对称性模糊逻辑:模糊逻辑的蕴含、摩根定律、模糊逻辑的合取和析取以上是考研数学的知识点总结,希望对大家有所帮助。

图论双连通

图论双连通

图的割点、桥与双连通分支[点连通度与边连通度]在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。

一个图的点连通度的定义为,最小割点集合中的顶点数。

类似的,如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合。

一个图的边连通度的定义为,最小割边集合中的边数。

[双连通图、割点与桥]如果一个无向连通图的点连通度大于1,则称该图是点双连通的(point biconnected),简称双连通或重连通。

一个图有割点,当且仅当这个图的点连通度为1,则割点集合的唯一元素被称为割点(cut point),又叫关节点(articulation point)。

如果一个无向连通图的边连通度大于1,则称该图是边双连通的(edge biconnected),简称双连通或重连通。

一个图有桥,当且仅当这个图的边连通度为1,则割边集合的唯一元素被称为桥(bridge),又叫关节边(articulation edge)。

可以看出,点双连通与边双连通都可以简称为双连通,它们之间是有着某种联系的,下文中提到的双连通,均既可指点双连通,又可指边双连通。

[双连通分支]在图G的所有子图G'中,如果G'是双连通的,则称G'为双连通子图。

如果一个双连通子图G'它不是任何一个双连通子图的真子集,则G'为极大双连通子图。

双连通分支(biconnected component),或重连通分支,就是图的极大双连通子图。

特殊的,点双连通分支又叫做块。

[求割点与桥]该算法是R.Tarjan发明的。

对图深度优先搜索,定义DFS(u)为u在搜索树(以下简称为树)中被遍历到的次序号。

定义Low(u)为u或u的子树中能通过非父子边追溯到的最早的节点,即DFS序号最小的节点。

根据定义,则有:Low(u)=Min { DFS(u) DFS(v) (u,v)为后向边(返祖边) 等价于DFS(v)<DFS(u)且v 不为u的父亲节点Low(v) (u,v)为树枝边(父子边) }一个顶点u是割点,当且仅当满足(1)或(2) (1) u为树根,且u有多于一个子树。

POJ 题目整理

POJ 题目整理

初期:一.基本算法:(1)枚举. (poj1753,poj2965)(2)贪心(poj1328,poj2109,poj2586)(3)递归和分治法.(4)递推.(5)构造法.(poj3295)(6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:(1)图的深度优先遍历和广度优先遍历.(2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra)(poj1860,poj3259,poj1062,poj2253,poj1125,poj2240)(3)最小生成树算法(prim,kruskal) (poj1789,poj2485,poj1258,poj3026)(4)拓扑排序 (poj1094)(5)二分图的最大匹配 (匈牙利算法) (poj3041,poj3020)(6)最大流的增广路算法(KM算法). (poj1459,poj3436)三.数据结构.(1)串 (poj1035,poj3080,poj1936)(2)排序(快排、归并排(与逆序数有关)、堆排) (poj2388,poj2299)(3)简单并查集的应用.(4)哈希表和二分查找等高效查找法(数的Hash,串的Hash)(poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503)(5)哈夫曼树(poj3253)(6)堆(7)trie树(静态建树、动态建树) (poj2513)四.简单搜索(1)深度优先搜索 (poj2488,poj3083,poj3009,poj1321,poj2251)(2)广度优先搜索(poj3278,poj1426,poj3126,poj3087.poj3414)(3)简单搜索技巧和剪枝(poj2531,poj1416,poj2676,1129)五.动态规划(1)背包问题. (poj1837,poj1276)(2)型如下表的简单DP(可参考lrj的书 page149):1.E[j]=opt{D+w(i,j)} (poj3267,poj1836,poj1260,poj2533)2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最长公共子序列) (poj3176,poj1080,poj1159)3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最优二分检索树问题)六.数学(1)组合数学:1.加法原理和乘法原理.2.排列组合.3.递推关系.(POJ3252,poj1850,poj1019,poj1942)(2)数论.1.素数与整除问题2.进制位.3.同余模运算.(poj2635, poj3292,poj1845,poj2115)(3)计算方法.1.二分法求解单调函数相关知识.(poj3273,poj3258,poj1905,poj3122)七.计算几何学.(1)几何公式.(2)叉积和点积的运用(如线段相交的判定,点到线段的距离等). (poj2031,poj1039)(3)多边型的简单算法(求面积)和相关判定(点在多边型内,多边型是否相交)(poj1408,poj1584)(4)凸包. (poj2187,poj1113)中级:一.基本算法:(1)C++的标准模版库的应用. (poj3096,poj3007)(2)较为复杂的模拟题的训练(poj3393,poj1472,poj3371,poj1027,poj2706)二.图算法:(1)差分约束系统的建立和求解. (poj1201,poj2983)(2)最小费用最大流(poj2516,poj2516,poj2195)(3)双连通分量(poj2942)(4)强连通分支及其缩点.(poj2186)(5)图的割边和割点(poj3352)(6)最小割模型、网络流规约(poj3308, )三.数据结构.(1)线段树. (poj2528,poj2828,poj2777,poj2886,poj2750)(2)静态二叉检索树. (poj2482,poj2352)(3)树状树组(poj1195,poj3321)(4)RMQ. (poj3264,poj3368)(5)并查集的高级应用. (poj1703,2492)(6)KMP算法. (poj1961,poj2406)四.搜索(1)最优化剪枝和可行性剪枝(2)搜索的技巧和优化 (poj3411,poj1724)(3)记忆化搜索(poj3373,poj1691)五.动态规划(1)较为复杂的动态规划(如动态规划解特别的施行商问题等) (poj1191,poj1054,poj3280,poj2029,poj2948,poj1925,poj3034)(2)记录状态的动态规划. (POJ3254,poj2411,poj1185)(3)树型动态规划(poj2057,poj1947,poj2486,poj3140)六.数学(1)组合数学:1.容斥原理.2.抽屉原理.3.置换群与Polya定理(poj1286,poj2409,poj3270,poj1026).4.递推关系和母函数.(2)数学.1.高斯消元法(poj2947,poj1487, poj2065,poj1166,poj1222)2.概率问题. (poj3071,poj3440)3.GCD、扩展的欧几里德(中国剩余定理) (poj3101)(3)计算方法.1.0/1分数规划. (poj2976)2.三分法求解单峰(单谷)的极值.3.矩阵法(poj3150,poj3422,poj3070)4.迭代逼近(poj3301)(4)随机化算法(poj3318,poj2454)(5)杂题. (poj1870,poj3296,poj3286,poj1095)七.计算几何学.(1)坐标离散化.(2)扫描线算法(例如求矩形的面积和周长并,常和线段树或堆一起使用).(poj1765,poj1177,poj1151,poj3277,poj2280,poj3004)(3)多边形的内核(半平面交)(poj3130,poj3335)(4)几何工具的综合应用.(poj1819,poj1066,poj2043,poj3227,poj2165,poj3429)高级:一.基本算法要求:(1)代码快速写成,精简但不失风格(poj2525,poj1684,poj1421,poj1048,poj2050,poj3306)(2)保证正确性和高效性. poj3434二.图算法:(1)度限制最小生成树和第K最短路. (poj1639)(2)最短路,最小生成树,二分图,最大流问题的相关理论(主要是模型建立和求解) (poj3155, poj2112,poj1966,poj3281,poj1087,poj2289,poj3216,poj2446) (3)最优比率生成树. (poj2728)(4)最小树形图(poj3164)(5)次小生成树.(6)无向图、有向图的最小环三.数据结构.(1)trie图的建立和应用. (poj2778)(2)LCA和RMQ问题(LCA(最近公共祖先问题) 有离线算法(并查集+dfs) 和在线算法(RMQ+dfs)).(poj1330)(3)双端队列和它的应用(维护一个单调的队列,常常在动态规划中起到优化状态转移的目的).(poj2823)(4)左偏树(可合并堆).(5)后缀树(非常有用的数据结构,也是赛区考题的热点). (poj3415,poj3294)四.搜索(1)较麻烦的搜索题目训练(poj1069,poj3322,poj1475,poj1924,poj2049,poj3426)(2)广搜的状态优化:利用M进制数存储状态、转化为串用hash表判重、按位压缩存储状态、双向广搜、A*算法. (poj1768,poj1184,poj1872,poj1324,poj2046,poj1482)(3)深搜的优化:尽量用位运算、一定要加剪枝、函数参数尽可能少、层数不易过大、可以考虑双向搜索或者是轮换搜索、IDA*算法.(poj3131,poj2870,poj2286)五.动态规划(1)需要用数据结构优化的动态规划. (poj2754,poj3378,poj3017)(2)四边形不等式理论.(3)较难的状态DP(poj3133)六.数学(1)组合数学.1.MoBius反演(poj2888,poj2154)2.偏序关系理论.(2)博奕论.1.极大极小过程(poj3317,poj1085)2.Nim问题.七.计算几何学.(1)半平面求交(poj3384,poj2540)(2)可视图的建立(poj2966)(3)点集最小圆覆盖.(4)对踵点(poj2079)八.综合题.(poj3109,poj1478,poj1462,poj2729,poj2048,poj3336,poj3315,poj2148,poj1263) 以及补充Dp状态设计与方程总结1.不完全状态记录<1>青蛙过河问题<2>利用区间dp2.背包类问题<1> 0-1背包,经典问题<2>无限背包,经典问题<3>判定性背包问题<4>带附属关系的背包问题<5> + -1背包问题<6>双背包求最优值<7>构造三角形问题<8>带上下界限制的背包问题(012背包)3.线性的动态规划问题<1>积木游戏问题<2>决斗(判定性问题)<3>圆的最大多边形问题<4>统计单词个数问题<5>棋盘分割<6>日程安排问题<7>最小逼近问题(求出两数之比最接近某数/两数之和等于某数等等)<8>方块消除游戏(某区间可以连续消去求最大效益)<9>资源分配问题<10>数字三角形问题<11>漂亮的打印<12>邮局问题与构造答案<13>最高积木问题<14>两段连续和最大<15>2次幂和问题<16>N个数的最大M段子段和<17>交叉最大数问题4.判定性问题的dp(如判定整除、判定可达性等)<1>模K问题的dp<2>特殊的模K问题,求最大(最小)模K的数<3>变换数问题5.单调性优化的动态规划<1>1-SUM问题<2>2-SUM问题<3>序列划分问题(单调队列优化)6.剖分问题(多边形剖分/石子合并/圆的剖分/乘积最大)<1>凸多边形的三角剖分问题<2>乘积最大问题<3>多边形游戏(多边形边上是操作符,顶点有权值)<4>石子合并(N^3/N^2/NLogN各种优化)7.贪心的动态规划<1>最优装载问题<2>部分背包问题<3>乘船问题<4>贪心策略<5>双机调度问题Johnson算法8.状态dp<1>牛仔射击问题(博弈类)<2>哈密顿路径的状态dp<3>两支点天平平衡问题<4>一个有向图的最接近二部图9.树型dp<1>完美服务器问题(每个节点有3种状态)<2>小胖守皇宫问题<3>网络收费问题<4>树中漫游问题<5>树上的博弈<6>树的最大独立集问题<7>树的最大平衡值问题<8>构造树的最小环转一个搞ACM需要的掌握的算法.要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来.适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什么就眼红, 发挥自己的长处,这才是重要的.第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打出来.1.最短路(Floyd、Dijstra,BellmanFord)2.最小生成树(先写个prim,kruscal要用并查集,不好写)3.大数(高精度)加减乘除4.二分查找. (代码可在五行以内)5.叉乘、判线段相交、然后写个凸包.6.BFS、DFS,同时熟练hash表(要熟,要灵活,代码要简)7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式.8. 调用系统的qsort, 技巧很多,慢慢掌握.9. 任意进制间的转换第二阶段:练习复杂一点,但也较常用的算法。

算法学习:图论之图的割点,桥,双连通分支

算法学习:图论之图的割点,桥,双连通分支

图的割点、桥与双连通分支[点连通度与边连通度]在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。

一个图的点连通度的定义为,最小割点集合中的顶点数。

类似的,如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合。

一个图的边连通度的定义为,最小割边集合中的边数。

注:以上定义的意思是,即有可能删除两个或两个以上点的时候才能形成多个连通块![双连通图、割点与桥]如果一个无向连通图的点连通度大于1,则称该图是点双连通的(point biconnected),简称双连通或重连通。

一个图有割点,当且仅当这个图的点连通度为1,则割点集合的唯一元素被称为割点(cut point),又叫关节点(articulation point)。

如果一个无向连通图的边连通度大于1,则称该图是边双连通的(edge biconnected),简称双连通或重连通。

一个图有桥,当且仅当这个图的边连通度为1,则割边集合的唯一元素被称为桥(bridge),又叫关节边(articulation edge)。

可以看出,点双连通与边双连通都可以简称为双连通,它们之间是有着某种联系的,下文中提到的双连通,均既可指点双连通,又可指边双连通。

[双连通分支]在图G的所有子图G’中,如果G’是双连通的,则称G’为双连通子图。

如果一个双连通子图G’它不是任何一个双连通子图的真子集,则G’为极大双连通子图。

双连通分支(biconnected component),或重连通分支,就是图的极大双连通子图。

特殊的,点双连通分支又叫做块。

[求割点与桥]该算法是R.Tarjan发明的。

对图深度优先搜索,定义DFS(u)为u在搜索树(以下简称为树)中被遍历到的次序号。

定义Low(u)为u或u的子树中能通过非父子边追溯到的最早的节点,即DFS序号最小的节点。

图的基本概念与性质

图的基本概念与性质

第3章图的基本概念与性质一、概念图——图可以用集合的形式表示,即图可以表示为一个三元组,包含结点集、边集,以及边与结点对集间的映射.如果用结点对来表示边,则图可以表示成一个由结点集与边集组成的二元组.定义3.1.1图G是一个三元组<V(G),E(G),ϕG>,其中V(G)是一个非空的结点集(或称顶点集),E(G)是边集,ϕG是从边集E(G)到结点偶对(无序偶或有序偶)集上的函数.图定义中的结点偶对可以是有序的,也可以是无序的.有向边、端点——若图中的边e所对应的结点偶对是有序的,记为<a,b>,则称e是有向边(简称弧).a,b分别称为弧的始点与终点,并均称为e的端点.称e是关联于结点a 和b的,结点a和结点b是相、邻的,或称结点a和结点b是邻接的.无向边、端点——若图中的边e所对应的结点偶对是无序的,记为(a,b),则称e是无向边(简称棱).a,b称为e的端点.称e是关联于结点a和b的,结点a和结点b是相、邻的,或称结点a和结点b是邻接的.有向图——每一条边均为有向边的图称为有向图.无向图——每一条边均为无向边的图称为无向图.底图——如果把有向图中每条有向边都看作无向边,就得一个无向图,此无向图称为原有向图的底图.底图只表示出结点间的连接关系而没有表示出连接边的方向.弧立结点——图中不与任何相邻的结点称为弧立结点.零图——全由孤立结点构成的图称为零图.自回路(环)——关联于同一结点的一条边称为自回路或环.重边(平行边)——在有向图中,两结点间(包括结点自身间)若多于一条边,则称这几条边为重边或平行边.多重图——含有重边的图称为多重图.线图——非多重图称为线图.定义3.1.2(简单图)无自回路的线图称为简单图.定义3.1.3(结点的度数、最大度、最小度)图G=<V,E>中,与V中结点v(v∈V)相关联的边数,称为该结点的度数,记作为deg(v).记∆(G)= max{deg(v)| v∈V(G)},δ(G)= min{deg(v)| v∈V(G)},分别称为G=<V,E>的最大度和最小度.定义3.1.4(出度、入度、度数)在有向图中,对于任何结点v,以v为始点的边的条数称为结点v的引出次数(或出度);以v为终点的边的条数称为结点v的引入次数(或入度);结点v的引出次数和引入次数之和称为v的次数(或度数).定义3.1.5(二部图)设G=〈V,E>是n阶无向图,若能将V分成两个互不相交的子集V1与V2使得G中任一边的两端点都不在同一个V i(i=1,2)中,则称G为二部图.记G=<V1,V2,E>.定义3.1.6(完全图)简单图G=<V,E>中,若每一对结点间都有边相连,则称该图为完全图.有n个结点的无向完全图记为K n.定义3.1.7(k-正则图)若无向简单图中,每个结点的度均为某个固定整数k,则称该图为k-正则图.定义3.1.8(赋权图)赋权图G是一个三重组<V,E,g>或四重组<V,E,f,g>,其中V是结点集合,E是边的集合,f是定义在V上的函数,g是定义在E上的函数.定义3.1.9(补图)设图G=<V,E>有n个顶点,图H=<V,E’>也有同样的顶点,而E’是由n个结点的完全图的边删去E所得,则图H称为图G的补图,记为H=G,显然,G=H.定义3.1.10(子图、真子图、生成子图)设G=<V,E>和G’=<V’,E’>是两个图.(1)若V’⊆V且E’⊆E,则称G’是G的子图;(2)若V’⊂V或E’⊂E,则称G’是G的真子图;(3)若V’=V和E’⊆E,则称G’是G的生成子图;(4)若子图G’中没有孤立结点,G’由E’唯一确定,则称G’为由边集E’导出的子图;(5)若子图G’中,对V’中的任意两个结点u,v,当u,v∈V’时有[u,v]∈E’,则G’由V’唯一确定,则称G’为由结点集V’导出的子图.定义3.1.11(补图) 设G’=<V’,E’>是G=<V,E>的子图,若给定另外一个图G’’=<V’’,E’’>,使得E’’=E-E’,且V’’中仅包含E’’的边所关联的结点,则称G’’是子图G’的相对于G 的补图.定义3.1.12(同构) 设G=〈V,E>和G’=<V’,E’>是两个图,若存在从V到V’的双射函数f,使对任意[a,b]∈E,当且仅当[f(a),f (b)]∈E’,并且[a,b]和[f(a),f (b)]有相同的重数,则称G和G’是同构的.定义3.1.13(路径) 在图G=<V,E>中,设v0,v1,…,v n∈V,e1,e2,….,e n∈E,其中e i是关联于结点v i-1,v i的边,交替序列v0 e1 v1 e2…e n v n称为联结v0到v n的路径(或称路).v0与v n分别称为路的起点与终点,边的数目n称为路的长度.孤立点——长度为0的路定义为孤立点.简单路径——若序列中所有的边e1,e2,…., e n均互不相同,则称此路径为简单路径.基本路径——若序列中所有的点v0,v1,…,v n均互不相同,则称此路径是基本路径.回路——若v0=v n,即路径中的终点与始点相重合,则称此路径为回路.简单回路——没有相同边的回路称为简单回路.基本回路(圈)——各结点均互不相同的回路称为基本回路(或圈).奇圈(偶圈)——长度为奇(偶)数的圈称为奇(偶)圈.定义3.2.1(可达、连通)在图G=<V,E>中,设有结点v j与v k,若从v j到v k存在任何一条路径,则称结点v k从结点v j可达,也称结点v j与v k是连通的.定义3.2.2(连通图、非连通图、分离图)若G是平凡图或G中任意两个结点都是连通的,则称G是连通图,否则称G为非连通图或分离图.定义3.2.3(连通分支)设G=<V,E>是图,连通关系的商集为{V1,V2,…,V m},则其导出的子图G(V i)(i=1,2,…m)称为图G的连通分支(图),将图G的连通分支数记作W(G).定义3.2.4(短程线)设u与v是图G的两个结点,若u与v连通,则称u与v之间的长度最短的路为u与v之间的短程线,短程线的长度可作为结点u与v间的距离,记作d(u,v),其满足下列性质:d(u,v) ≥ 0,u=v时,d(u,v) =0 (非负性)d(u,v) = d(v,u) (对称性)d(u,v) + d(v,w) ≥d(u,w) (三角不等式)若u与v不连通,则通常记d(u,v) = ∞.定义3.2.5(单向连通、强连通、弱连通)在简单有向图中,如果在任何结点偶对中,至少从一个结点到另一个结点可达的,则称图G是单向(侧)连通的;如果在任何结点偶对中,两结点对互相可达,则称图G是强连通的;如果图的底图(在图G中略去边的方向,得到无向图)是连通的,则称图G是弱连通的.定义3.2.6(极大强连通子图、极大单向连通子图、极大弱连通子图、强分图、单向分图、弱分图) 在简单有向图G =<V ,E >中,G’是G 的子图,如G’是强连通的(单向连通的,弱连通的),且没有包含G’的更大的子图G’’是强连通的(单向连通的,弱连通的),则称G’是极大强连通子图(极大单向连通子图,极大弱连通子图)又叫强分图(单向分图,弱分图).定义3.2.7(点割集、割点) 设无向图G =<V ,E >为连通图,若有点集V 1⊂V ,使图G 删除了V 1的所有结点后,所得的子图是不连通图,而删除了V 1的任何真子集后,所得的子图是连通图,则称V 1是G 的一个点割集.若某个结点构成一个点割集,则称该结点为割点.定义3.2.8(点连通度) 若G 为无向连通图且不含Kn 为生成子图,则称k (G )=min{|V 1| ∣V 1是G 的一个点割集}为G 的点连通度(简称连通度).规定:完全图Kn 的点连通度为n ,n ≥1.非连通图的点连通度为0.若k (G ) ≥k ,则称G 为k -连通图.定义3.2.9(边割集、割边、桥) 设无向图G =<V ,E >为连通图,若有边集E 1⊂E ,使图G 删除了E 1的所有边后,所得的子图是不连通图,而删除了E 1的任何真子集后,所得的子图是连通图,则称E 1是G 的一个边割集.若某个边构成一个边割集,则称该结点为割边(或桥). 定义3.2.10(连通度) 若G 为无向连通图,则称λ(G )=min{|E 1| ∣E 1是G 的一个边割集}为G 的边连通度.规定:非连通图的边连通度为0.若λ(G ) ≥k ,则称G 为k 边-连通图.定义3.3.1(邻接矩阵) 设G =<V ,E >是一个简单图,其中V ={v 1,v 2,…, v n },则n 阶方阵A (G )=(a ij )称为G 的邻接矩阵.其中各元素⎪⎩⎪⎨⎧==ji v v v v a j i j i ij 不相邻或与相邻与01 定义3.3.2(可达性矩阵) 设G =<V ,E >是一个简单图,|V |=n ,假定G 的结点已编序,即V ={v 1,v 2,…, v n },定义一个n ⨯n 方阵P =(p ij ).其中⎪⎩⎪⎨⎧=不存在一条路与从至少存在一条路到从j i j i ij v v v v p 01 则称矩阵P 为图G 的可达性矩阵.最短路径的数学模型——给定一个网络N (有向或无向赋权图),u 0与v 0是N 中指点的两个顶点,在N 中找一条从u 0到v 0且权最小的路.规定N 中的一条路P 的权w (P )称为p 的长度.若N 中存在从u 到v 的路,则将N 中从u 到v 且权最小的路称为u 到v 的最短路,其长度称为u 到v 的距离,记为d N (u ,v ).二、定理定理3.1.1(握手定理) 设G 是一个图,其结点集合为V ,边集合为E ,则∑∈=V v E v ||2)deg(定理3.1.2 图中次数为奇数的结点有偶数个.定理3.1.3 在任何有向图中,所有的入度之和等于所有结点的出度之和.定理3.1.4 有n 个结点的无向完全图K n 的边数为n (n -1)/2.定理3.1.5 在具有n 个结点的简单图G =<V , E >中,若从结点v j 到结点v k 有一条路,则从结点v j 到结点v k 有一条长度不大于n -1的路.定理3.1.5推论在一个具有n个结点的图G=<V, E>中,如果从结点v j到结点v k有一条路,则从结点v j到结点v k必有一条长度小于n的通路.定理3.1.6在具有n个结点的图G=<V,E>中,如果经v有一条回路,则经v有一条长度不超过n的回路.定理3.1.6推论在具有n个结点的图G=<V,E>中,如果经v有一条简单回路,则经v 有一条长度不超过n的基本回路.定理3.2.1一个有向图是强连通的,当且仅当G中有一个回路,其至少包含每个结点一次.定理3.2.2在有向图G=〈V,E〉中,G的每一结点都在也只在一个强(弱)分图中.定理3.2.3在有向图G=〈V,E〉中,G的每一结点都处在一个或一个以上的单向分图中.定理3.2.4(Whitney)对于任何一个图G,有k(G) ≤λ (G) ≤δ(G)其中k(G)、λ (G)、δ(G)分别为G的点连通度、边连通度和最小度.定理3.2.5一个连通无向图G中的结点v是割点的充分必要条件是存在两个结点u与w,使得结点u与w的每一条路都通过v.三、方法1.两图同构的必要条件:(1)结点数相等;(2)边数相等;(3)度数相同的结点数相等.2.邻接矩阵运算特征(1)图G=<V,E>的邻接矩阵不唯一,而与V中的元素标定次序有关.对V中各元素不同的标定次序可得到同一图G的不同邻接矩阵.但这些邻接矩阵经过适当地交换行和列的次序,就从一个邻接矩阵变到另一个邻接矩阵.根据不同邻接矩阵所作的有向图都是同构的.因此,可选V元素的任一种标定次序所得出的邻接矩阵.(2)当有向线图代表关系时,邻接矩阵就可看作是一种关系矩阵.有向图是自反的,矩阵的对角线元素全为1.有向图是非自反的,矩阵的对角线元素全为0.有向图是对称的,对所有i和j,矩阵是对称的.有向图是反对称的,对所有i和j,矩阵是以主对角线对称的元素不可能同时为1.(3)零图的邻接矩阵的元素全为零,并称其为零矩阵.(4)图的每一顶点都有自回路而再无其它边时,图的邻接矩阵是单位矩阵.(5)设有向线图G=<V,E>的邻接矩阵是A,则A的逆图的邻接矩阵是A的转置矩阵.3.可达性矩阵的计算方法一般地,可以由图G的邻接矩阵A得到可达性矩阵P.即令B n=A+A2+…+A n,在从B n中将不为0的元素改为1,而为零的元素不变,这样改换的矩阵即为可达性矩阵P.也可以将矩阵A,A2,…,A n分别改为布尔矩阵A,A(2),…,A(n),简化计算,故P= A∨A(2)∨…∨A(n),其中A(i)表示在布尔运算下A的i次方.4.求最短路径的Dijkstra算法步骤(1)置l(u0)=0,对v∈V-{ u0},l(v)= +∞,S0 ={ u0},i=0.(2)对每个v∈ N G-Si(u i),用min{ l(v),l(u i)+ w(u i,v)}代替l(v).若l(v)取到l(u i)+w(u i,v),则在v旁边记下(u i).计算min(v∈G- S i ){ l(v)},并将达到最小值的这个顶点记为u i+1.置S i+1= S i⋃{ u i+1}.(3)若i=|G|-1,则算法停止,否则用置i 为i+1,并转入第(2)步.算法结束时,从u0到v的距离由最终的标号给出l(v),并且可根据各个顶点旁边的(u i)追回出从u0到v的最短路径.若为求某个特定的顶点v时,则可以在u j= v时使算法停止即求得结果.。

图论中的圈与块,无向图的最小环

图论中的圈与块,无向图的最小环

浙江省2006年集训讲义
29
嗅探器(4)
题目要求的点一定是图中的割点,但是图中 的割点不一定题目要求的点。如上图中的蓝 色点,它虽然是图中的割点,但是割掉它之 后却不能使a和b不连通 由于a点肯定不是我们所求的点,所以可以以 a为根开始DFS遍历整张图。 对于生成的DFS树,如果点v是割点,如果以 他为根的子树中存在点b,那么该点是问题所 求的点。
2011-1-28 浙江省2006年集训讲义 17
DFS算法
父子边用黑色标记,返祖边用红色标记 如下图,除掉返祖边之后,我们可以把它看 作一棵DFS树
1 2 3 4 5
6
7
2011-1-28
浙江省2006年集训讲义
18
割点
G是连通图,v∈V(G),G – v 不再连通,则称 v是G的割顶。
2011-1-28
结点个数N≤100000 边数M≤1000000
2011-1-28
浙江省2006年集训讲义
32
关键网线(2)
朴素算法: 枚举每条边,删除它,然后判断是否有独立 出来的连通区域内没有A属性或者没有B属性。 复杂度O(M2) 当然,这个复杂度太大了!
2011-1-28
浙江省2006年集训讲义
33
关键网线(3)
2011-1-28 浙江省2006年集训讲义 15
块及其相关知识
DFS算法 割点 (一般对于无向图而言) 割边 (一般对于无向图而言) 块(一般对于无向图而言) 强连通子图(一般对于有向图而言)
2011-1-28
浙江省2006年集训讲义
16
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;

点割集、边割集、割点、桥、连通度、双连通分支

点割集、边割集、割点、桥、连通度、双连通分支

对于一个无向图G:
定义一:删除一个点v是指删除点v以及所有与点v关联的边。

定义二:删除一条边e是指删除这条边,但是保留e的两个顶点。

点割集:V是一些顶点的集合,如果删除V中的所有顶点之后,G不在连通,但是对于V的任何真子集V1,删除V1后G仍然连通,则称V是点割集。

割点:如果点割集里只有一个顶点,那么这个顶点叫做割点。

点连通度:最小的点割集的大小。

边割集:E是一些边的集合,如果删除E里的所有边之后G不在连通,但是对于E的任何真子集E1,删除E1之后G仍然连通,则称E是边割集。

桥:如果边割集里只有一条边,该边称为桥。

边连通度:最小的边割集的大小。

双连通:如果一个图没有割点,那么这个图称为2-连通的,或者双连通的。

一个图的极大双连通子图称为双连通分量。

注意是极大而不是最大,即意味双连通子图不一定只有一个。

7.2路径及图的连通

7.2路径及图的连通
v1 e2 v7 e1 v2 e4 v3 e5 e3 e6 v8 e7 v4 e11 v9 e8 v5 e10 e9 v6
可知, 可知,{v2,v3},{v3,v4,v5},{v4,v9},{v2}, 是点割集, 是割点。 {v3},{v5} 是点割集,其中 v2, v3, v5是割点。
边割集
设无向图G=<V,E>,若存在边集E E,使 设无向图G=<V,E>,若存在边集E1⊂E,使 G=<V,E>,若存在边集 图G-E1的连通分支数p(G-E1)>p(G),且对任 的连通分支数p(Gp(G),且对任 p(G 意E2⊂E1均有p(G-E2)=p(G),则称E1是G的边 均有p(G )=p(G),则称 p(G则称E 割集,如边割集中只有一条边, 割集,如边割集中只有一条边,则称该边为 割边或桥。 割边或桥。
ቤተ መጻሕፍቲ ባይዱ
边割集例
e1 e2 e3 e4 e6 e5 e7 e11 e8 e9 e10
在G 中, {e1,e2},{e1,e3},{e2,e3},{e4},{e5,e6},{e5, e7},{e6,e7},{e8,e9},{e10} 均是边割集,其中e 是桥。 均是边割集,其中e4,e10是桥。
有有向路, u→v→u构成了一个有向回路 构成了一个有向回路, 有有向路, 则u→v→u 构成了一个有向回路, 如果该有向回路没有包含 w,而u→w,w→u均有有向路 均有有向路, u→v→u→w→u又是一个有向回路 又是一个有向回路, w,而u→w,w→u均有有向路,则u→v→u→w→u又是一个有向回路,一直 下去可以将图中所有的点均包含进去。 下去可以将图中所有的点均包含进去。
v0到v4有一条有向通路 但v4到v0就没有有向通路。 有一条有向通路,但 就没有有向通路。

图论II 图的基本概念

图论II 图的基本概念

单向连通
弱连通
定理(强连通判别法) D强连通当且仅当D中存在经 过每个顶点至少一次的回路 定理(单向连通判别法) D单向连通当且仅当 D中存 在经过每个顶点至少一次的路
13
1.3 带权图、最短路径、图着色

带权图与最短路径 图着色问题
14
最短路径
带权图G=<V,E,w>, 其中w:ER. eE, w(e)称作e的权. 若e=(vi,vj), 记w(e)=wij . 若vi,vj不相邻, 记wij =. 路L的权: L的所有边的权之和, 记作w(L). u和v之间的最短路径: u和v之间权最小的路.
按通畅性要求由高到低: 通路 > 迹 > 路
按可能的复杂或曲折程度由高到低:路 > 迹 >通路
2
路与回路

试分别画出:
一条通路 一条非通路的迹 一条非迹的路 从中直观感受一下路、迹和通路对通畅程度的
不同要求
路与回路实例
4
路与回路(续)
说明: 表示方法 ① 用顶点和边的交替序列(定义), 如=v0e1v1e2…elvl ② 用边的序列, 如=e1e2…el ③ 简单图中, 用顶点的序列, 如=v0v1…vl ④ 非简单图中,可用混合表示法,如=v0v1e2v2e5v3v4v5 环是长度为1的圈, 两条平行边构成长度为2的圈. 在无向简单图中, 所有圈的长度3; 在有向简单图 中, 所有圈的长度2.
1.2 路、回路、图的连通性
路,通路,迹 无向图的连通性
无向连通图, 连通分支
有向连通图
弱连通图, 单向连通图, 强连通图
点割集与割点 边割集与割边(桥)
1
路与回路

acm知识点

acm知识点
转一个搞ACM需要的掌握的算法.
要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来.
适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什么就眼红,
发挥自己的长处,这才是重要的.
第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,
STL中的数据结构
vector
deque
set / map
动态规划 / 记忆化搜索
动态规划和记忆化搜索在思考方式上的区别
最长子序列系列问题
最长不下降子序列
最长公共子序列
最长公共不下降子序列
快速数论变换
……
素数问题
概率判素算法
概率因子分解
数据结构
组织结构
二叉堆
左偏树
二项树
胜者树
跳跃表
样式图标
弦图的性质和判定
组合数学
解决组合数学问题时常用的思想
逼近
递推 / 动态规划
概率问题
Polya定理
计算几何 / 解析几何
计算几何的核心:叉积 / 面积
解析几何的主力:复数
基本形
因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打
出来.
1.最短路(Floyd、Dijstra,BellmanFord)
2.最小生成树(先写个prim,kruscal要用并查集,不好写)
3.大数(高精度)加减乘除
4.二分查找. (代码可在五行以内)
5.叉乘、判线段相交、然后写个凸包.
(3)简单搜索技巧和剪枝(poj2531,poj1416,poj2676,1129)

离散数学及其应用重要名词中英对应以及重要概念解释与举例

离散数学及其应用重要名词中英对应以及重要概念解释与举例

离散数学及其应用重要名词中英对应以及重要概念解释与举例1 The Foundations: Logic and Proofs(逻辑与证明)1.1 Propositional Logic(命题逻辑)Propositions(命题)——declarative sentence that is either true or false, but not both.判断性语句,正确性唯一。

Truth Table(真值表)Conjunction(合取,“与”,and),Disjunction(析取,or,“相容或”),Exclusive(异或),Negation(非,not),Biconditional(双条件,双向,if and only if)Translating English Sentences1.2 Propositional Equivalences(命题等价)Tautology(永真式、重言式),Contradiction(永假式、矛盾式),Contingency(偶然式)Logical Equivalences(逻辑等价)——Compound propositions that have the same truth values in all possible cases are called logical equivalent.(真值表相同的式子,p<->q是重言式)Logical Equivalences——Page24Disjunctive normal form(DNF,析取范式)Conjunctive normal form(CNF,合取范式) 见Page27~291.3 Predicates and Quantifiers(谓词和量词)Predicates——谓词,说明关系、特征的修饰词Quantifiers——量词Ø Universal Quantifier(全称量词) "全部满足Ø Existential Quantifier(存在量词) $至少有一个Binding Variables(变量绑定,量词作用域与重名的问题)Logical Equivalence Involving QuantifiersNegating Quantified Expressions(量词否定表达:否定全称=存在否定,否定存在=全程否定) Translating from English into Logical Expressions(自然语句转化为逻辑表达)Using Quantifiers in System SpecificationsExamples from Lewis Carrol——全称量词与条件式(p->q)搭配,存在量词与合取式搭配。

Tarjan算法

Tarjan算法

[有向图强连通分量]在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。

如果有向图G的每两个顶点都强连通,称G是一个强连通图。

非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。

下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。

{5},{6}也分别是两个强连通分量。

直接根据定义,用双向遍历取交集的方法求强连通分量,时间复杂度为O(N^2+M)。

更好的方法是Kosaraju算法或Tarjan算法,两者的时间复杂度都是O(N+M)。

本文介绍的是Tarjan算法。

[Tarjan算法]Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树。

搜索时,把当前搜索树中未处理的节点加入一个堆栈,回溯时可以判断栈顶到栈中的节点是否为一个强连通分量。

定义DFN(u)为节点u搜索的次序编号(时间戳),Low(u)为u或u的子树能够追溯到的最早的栈中节点的次序号。

由定义可以得出,Low(u)=Min{DFN(u),Low(v),(u,v)为树枝边,u为v的父节点DFN(v),(u,v)为指向栈中节点的后向边(非横叉边)}当DFN(u)=Low(u)时,以u为根的搜索子树上所有节点是一个强连通分量。

算法伪代码如下tarjan(u){DFN[u]=Low[u]=++Index // 为节点u设定次序编号和Low初值Stack.push(u)// 将节点u压入栈中for each (u, v) in E // 枚举每一条边if(v is not visted)// 如果节点v未被访问过tarjan(v)// 继续向下找Low[u]= min(Low[u], Low[v])else if(v in S)// 如果节点u还在栈内Low[u]= min(Low[u], DFN[v])if(DFN[u]== Low[u])// 如果节点u是强连通分量的根repeatv = S.pop// 将v退栈,为该强连通分量中一个顶点print vuntil (u== v)}接下来是对算法流程的演示。

ACM在线训练方法09

ACM在线训练方法09
poj3349,poj3274,POJ2151,poj1840,poj200 2,poj2503 poj3253 poj1442,poj2051 poj2513 poj2528,poj2828,poj2777,poj2886,poj275 0 poj2482,poj2352 poj1195,poj3321 poj3264,poj3368 poj1703,2492 poj1961,poj2406 poj2778
ACM 在线训练方法(请仔细阅读)
一、ACM 训练目标
1、寒假前,有没有小组成员 AC 题目 20+。 2、开学时,有没有小组成员 AC 题目 50+,甚至出现 100+。
二、练习步骤
1、注册注意事项 pku Online Judge 网址:/JudgeOnline/ 在 中的 Online Judge 系统注册,并在学校名中注明“cfz08”。注册名今 后尽量不要改变。一方面便于管理,另一方面由于每个用户的历史记录非常完整,今后可 以作为一个非正式的自我证明材料。 2、做哪些题? 在线题库中题目数量众多,且题目的难易程度、题目类型都不按顺序来。例如,有特 别简单的,也有超级难的(提交次数与 AC 次数的比值可以一定程度上反映难度)。 (1)先搞定把 1000 号题目(也就是第一个题目),此题用于确定你掌握了该系统的使用方 法以及对 I/O 的要求。 (2)POJ 题山题海,比赛前能踏实解决 200 个问题的已属牛人。所以,请按照本文后“附 1”的题目分类表,根据你的学习计划做题。 (3)绝不要轻易 copy 网络现成的代码后,就算自己过了此题——毫无意义。切记! 3、看一道题->独立思考、尝试解决
poj1768,poj1184,poj1872,poj1324,poj204 6,poj1482

与图论相关的算法

与图论相关的算法
if map[q^.v].visited=false then dfs(q^.v); q:=q^.nextarc; end; end;
广度优先搜索
procedure bfs(i:integer); var p:arcptr;
closed,open:integer; q:array[1..maxn] of integer; begin 访问并处理顶点i; map[i].visited:=true; 顶点i进入队列q; closed:=0; open:=1; repeat
编号都不超过k的路径。 递推公式:
t(k)[i,j]= t(k-1)[i,j] or (t(k-1)[i,k] and t(k-1)[k,j])
Johnson算法
Johnson算法常用于求顶点个数较多的稀 疏图的每对点间最短路问题。
感兴趣的同学请参阅《国际信息学奥林 匹克竞赛指导——实用算法的分析与程 序设计》
inc(closed); v:=q[closed]; p:=map[v].firstarc; while p<>nil do begin
if map[p^.v].visited=false then begin 访问并处理顶点q^.v; map[q^.v].visited=true; inc(open); q[open]:=q^.v; end;
q:=q^.nextarc; end; until closed=open; end;
计算连通分支数
count:=0; for i:=1 to n do
map[i].visited:=false; for i:=1 to n do
if map[i].visited=false do begin inc(count); dfs(i); end;

离散数学知识点整理

离散数学知识点整理

离散数学知识点整理离散数学⼀、逻辑和证明1.1命题逻辑命题:是⼀个可以判断真假的陈述句。

联接词:∧、∨、→、?、?。

记住“p仅当q”意思是“如果p,则q”,即p→。

记住“q除⾮p”意思是“?p→q”。

会考察条件语句翻译成汉语。

系统规范说明的⼀致性是指系统没有可能会导致⽭盾的需求,即若pq⽆论取何值都⽆法让复合语句为真,则该系统规范说明是不⼀致的。

1.3命题等价式逻辑等价:在所有可能情况下都有相同的真值的两个复合命题,可以⽤真值表或者构造新的逻辑等价式。

谓词+量词变成⼀个更详细的命题,量词要说明论域,否则没有意义,如果有约束条件就直接放在量词后⾯,如?x>0P(x)。

当论域中的元素可以⼀⼀列举,那么?xP(x)就等价于P(x1)∧P(x2)...∧P(xn)。

同理,?xP(x)就等价于P(x1)∨P(x2)...∨P(xn)。

两个语句是逻辑等价的,如果不论他们谓词是什么,也不论他们的论域是什么,他们总有相同的真值,如?x(P(x)∧Q(x))和(? xP(x))∧(?xQ(x))。

量词表达式的否定:??xP(x) ??x?P(x),??xP(x) ??x?P(x)。

1.5量词嵌套我们采⽤循环的思考⽅法。

量词顺序的不同会影响结果。

语句到嵌套量词语句的翻译,注意论域。

嵌套量词的否定就是连续使⽤德摩根定律,将否定词移⼊所有量词⾥。

1.6推理规则⼀个论证是有效的,如果它的所有前提为真且蕴含着结论为真。

但有效论证⼆、集合、函数、序列、与矩阵2.1集合∈说的是元素与集合的关系,?说的是集合与集合的关系。

常见数集有N={0,1,2,3...},Z整数集,Z+正整数集,Q有理数集,R 实数集,R+正实数集,C复数集。

A和B相等当仅当?x(x∈A?x∈B);A是B的⼦集当仅当?x(x∈A→x∈B);A是B的真⼦集当仅当?x(x∈A→x∈B)∧?x(x?A∧x∈B)。

幂集:集合元素的所有可能组合,肯定有?何它⾃⾝。

图论中的割点、割边、圈与块(黄劲松)

图论中的割点、割边、圈与块(黄劲松)
B
浙江省2006年集训讲义
10
小H的聚会(1)
给定每个节点的度限制,求在满足所有度限 制的条件下的最大生成树。(NOI2005)
这是一道提交答案式的题目,对于后面的几 个较大的数据,用另类MST算法对你的解进 行调整也能取得不错的效果!
2020/10/28
浙江省2006年集训讲义
11
最小环问题
2020/10/28
浙江省2006年集训讲义
5
水管局长(2)
数据范围约定
结点个数N≤1000 图中的边数M≤100000 询问次数Q≤100000 删边次数D≤5000
2020/10/28
浙江省2006年集训讲义
6
水管局长(3)
根据kruskal算法可以知道,最小生成树上的 连接两点之间的唯一路径一定是最大边最小 的
end
else
lowlink[v] := min(lowlink[v],dfn[u]); //uv是返祖边
end;
end;
2020/10/28
浙江省2006年集训讲义
25
割点与割边
猜想:两个割点之间的边是否是割边?割边的 两个端点是否是割点?
都错!
2020/10/28
浙江省2006年集训讲义
定理3:DFS的根r是割点的充要条件是:至 少有2条以r为尾(从r出发)的父子边
2020/10/28
证明?
浙江省2006年集训讲义
21
程序代码
PROCEDURE DFS(v);
begin
inc(sign); dfn[v] := sign;
//给v按照访问顺序的先后标号为sign
lowlink[v] := sign;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。





把所有入度为0的点编号 0,1,2,3,4 ....N -1 为所有从编号为i的入度0点可达的出度0点,添加 一条出边,连到编号为(i+1)%N 的那个出度0点, 这需要加n条边


若 m <= n,则 加了这n条边后,已经没有入度0点,则问题解决 ,一共加了n条边
若 m > n,则还有m-n个入度0点,则从这些点以 外任取一点,和这些点都连上边,即可,这还需 加m-n条边。 所以,max(m,n)就是第二个问题的解
ACM1236: 解题思路


1. 求出所有强连通分量
2. 每个强连通分量缩成一点,则形成一个有 向无环图DAG。 3. DAG上面有多少个入度为0的顶点,问题1的 答案就是条边,才能使得DAG变成强连通 的,问题2的答案就是多少 加边的方法:
要为每个入度为0的点添加入边,为每个出度 为0的点添加出边 假定有 n 个入度为0的点,m个出度为0的点, 如何加边?
Tarjan 算法
Q:为什么要膜拜Tarjan? 1.DFS是Hopcroft和Tarjan提出的 2.今天介绍的求强连通分支的一个算法是 Tarjan提出的,被称为Tarjan算法 3.Tarjan对DFS做了大量研究,包括离线的 LCA算法和平面图判定算法都是使用了DFS的 经典算法
4.Tarjan是大牛!
当深搜过程中遇到一个分量,首先发现的顶点v肯定是树根, 由于分量是一棵子树,且分量间顶点可互达,那么其他顶点 肯定能由v 发起的路径到达,那么其他节点都是v的子孙。 定义dfn数组,dfn[u] 表示u在深度优先遍历中的序号 我们定义 low 数组,low[v] 表示,从v出发经过v 的子孙形成 的路径和一条回退边,能够到达的最浅层次的顶点的序号。 注意这里到达的顶点必须是可用的,我们说当一个分量完成, 其包括的顶点全部设置为不可用。其实如果边是一条不同子 树之间的横跨边,它到达的顶点肯定是不可用的,因为那个 点已经属于另一个分量。 参考:/lewutian/archive/2009/08/30/4499657.aspx
/Algorithm/ShowArticle.asp?ArticleID=58
(a)为有向图G, 其中的阴影部分 是G的强连通分 支,对每个顶点 都标出了其发现 时刻与完成时刻 ,黑色边为深度 优先搜索的树 枝; (b)G的转置图GT 依次以b,c,g,h 为起点做DFS, 得到4个强连通 分量
给定一个有向图,求有多少个顶点是由任何顶 点出发都可达的。
顶点数<= 10,000,边数 <= 50,000

有用的定理:
有向无环图中唯一出度为0的点,一定可 以由任何点出发均可达(由于无环,所 以从任何点出发往前走,必然终止于 一个出度为0的点)
ACM2186: 解题思路


1. 求出所有强连通分量



tarjan(u) { DFN[u]=Low[u]=++time // 为节点u设定次序编号和Low初值 Stack.push(u) // 将节点u压入栈中 for each (u, v) in E // 枚举每一条边 if (v is not visted) // 如果节点v未被访问过 tarjan(v) // 继续向下找 Low[u] = min(Low[u], Low[v]) else if (v in Stack ) // 如果节点u还在栈内 Low[u] = min(Low[u], DFN[v]) //Low[u] = min(Low[u],Low[v]) 可否? if (DFN[u] == Low[u]) // 如果节点u是强连通分量的根 repeat v = Stack.pop // v为该强连通分量中的一个顶点 print v until (u== v) }
在dfs过程中,遇到新点令其dfn[u] = low[u] =当前遍历序 号 . 回溯时,如果发现dfn[u] == low[u], 则u是分量子树的 树根。 这是一个充要条件。 -->: 如果u 是树根,且由于 是强分量,其子孙都可达到u, 则子孙的low 都是u 的编号。 则low[u] = dfn[u]. <--: 如果low[u] == dfn[u], 假设u不是 树根,那么肯定有u的祖先是树根,那么low[u]肯定比当前 值小,矛盾,因此u是树根。 如何取出分量? 我们遇到新顶点时将顶点入栈,在回溯 时发现了根,且根是先被压入栈的,那么在根之后压入的 顶点都是分量中的顶点,否则如果有顶点属于其他分量, 就出现矛盾,因为在那个分量完成时,这个顶点已经弹出 不可用了。
算法复杂度分析
深度优先搜索的复杂度:Θ(V + E) 计算GT的复杂度:0或者Θ(V + E)(临接表) 所以总的复杂度为:Θ(V + E) 非常好的算法!

Kosaraju's algorithm

思考:Professor Deaver声称,用于强 连通分支的算法可以这样简化,即在第 二次深度优先搜索中使用原图(而不是 其转置图),并按完成时间递增的顺序 来扫描各个节点。这位教授的说法正确 么?


其他题目

acm1236,acm3180,acm2762(强连通+拓扑排 序),acm2553,acm3114(强连通 +dijkstra), acm3160(强连通+DP)
参考: /blog/scc-tarjan/
Tarjan算法是基于对图深度优先搜索的算法,每个强连通分 量为搜索树中的一棵子树。既然强连通分量是深搜树的一棵 子树,要找到一个分量,只要找到树根( 连接不同分量的桥 的前端顶点) ,然后取出其所属分量的顶点即可。

Korasaju算法


procedure Strongly_Connected_Components(G); begin 1.深度优先遍历G,算出每个结点u的结束时间f[u],起 点如何选择无所谓。 2.深度优先遍历G的转置图GT,选择遍历的起点时, 按照结点的结束时间从大到小进行。遍历的过程中, 一边遍历,一边给结点做分类标记,每找到一个新的 起点,分类标记值就加1。 3. 第2步中产生的标记值相同的结点构成深度优先森 林中的一棵树,也即一个强连通分量 end; 证明参考:
ACM1236: Network of Schools

给定一个有向图,求:
1) 至少要选几个顶点,才能做到从这些顶点出 发,可以到达全部顶点 2) 至少要加多少条边,才能使得从任何一个顶 点出发,都能到达全部顶点

顶点数<= 100
有用的定理:
有向无环图中所有入度不为0的点,一定 可以由某个入度为0的点出发可达。 (由于无环,所以从任何入度不为0的 点往回走,必然终止于一个入度为0的 点)
两个算法的分析比较
1.都是很巧妙的算法 2.都很快 3.Tarjan的算法一般来说要快30%,因 为只需要一遍DFS,同时,这种找DFS 搜索树中的反向边的想法在别的地方也 很有用。包括:

◦ 证明并查集时间复杂度 ◦ 求桥或者割点 ◦ 树形DP
ACM2186:Popular Cows

有向图的强连通分支
本讲义部分内容引用北京大学信息学院实验班袁洋、陈科吉同学讲义, 特此致谢
定 义

在有向图G中,如果任意两个不同的顶点 相互可达,则称该有向图是强连通的。 有向图G的极大强连通子图称为G的强连 通分支。
转置图的定义:将有向图G中的每一条 边反向形成的图称为G的转置GT。(注 意到原图和GT的强连通分支是一样的)
2. 每个强连通分量缩成一点,则形成一个有 向无环图DAG。 3. DAG上面如果有唯一的出度为0的点,则该点 能被所有的点可达。那么该点所代表的连通分 量上的所有的原图中的点,都能被原图中的所 有点可达,则该连通分量的点数,就是答案。


4. DAG上面如果有不止一个出度为0的点,则 这些点互相不可达,原问题无解,答案为0
ACM1236: Network of Schools

题目大意:N(2<N<100)各学校之间有单向的 网络,每个学校得到一套软件后,可以通过单 向网络向周边的学校传输,问题1:初始至少 需要向多少个学校发放软件,使得网络内所有 的学校最终都能得到软件。2,至少需要添加 几条传输线路(边),使任意向一个学校发放软 件后,经过若干次传送,网络内所有的学校最 终都能得到软件。
相关文档
最新文档