图论
文章平均质量分 79
れもんじよん
这个作者很懒,什么都没留下…
展开
-
单源最短路径(Dijkstra&Bellman-Ford)
1.Dijkstra算法(基于贪心思想)步骤: First:初始化dist[1]=0,其余节点的dist值为正无穷大。(dist数组是源点到其他节点的最短距离,这里选定1为原点)Second:找出一个未被标记的且dist[node]最小的节点node,然后标记node。Third:扫描节点node的所有出边node->ver,边长为z,若dist[ver]>dist[node...原创 2019-11-01 09:57:52 · 313 阅读 · 1 评论 -
Floyd
Floyd算法:把每个点作为起点,求解n次单源最短路问题。该算法分为三个阶段:for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)第一维K是中间点,第二维i是起点,第三维j是终点。那么内部该怎么操作呢:for(int k=1;k<=n;k++) for(int i=1;i<...原创 2019-11-02 09:34:23 · 222 阅读 · 0 评论 -
最小生成树
定理:任意一棵最小生成树一定包含无向图中权值最小的边。证明:假设无向图G=(V,E)存在一棵最小生成树不包含权值最小的边。设e=(x,y,z)是无向图中权值最小的边。把e添加到树中,e会和树上从x到y的路径一起构成一个环,并且环上其它边的权值都比z大。因此,用e代替环上的其它任意一条边,会形成一棵权值和更小的生成树,与假设矛盾。因此假设不成立,原命题成立。推论:给定一张无向图G=(V,E),n...原创 2019-11-02 19:41:11 · 328 阅读 · 1 评论 -
最近公共祖先(LCA)
定义:在一棵树中,若节点z既是节点x的祖先,也是节点y的祖先,则称z是x,y的公共祖先。在x,y的所有公共祖先中,深度最大的一个称为x,y的最近公共祖先。那么,我们怎么求两个节点的LCA呢?这里介绍3种求法:1.向上标记法这种方法大概是大部分人首先想到的最朴素的做法 ,就是我们首先从x向上走到根节点,并标记所有经过的节点,然后我们从y向上走到根节点,当第一次遇到已标记的节点时,就找到了L...原创 2019-11-05 11:03:17 · 170 阅读 · 0 评论 -
树的直径
定义:树中最远的两个节点之间的距离被称为树的直径。(同时,连接这两点的路径被称为树的最长链)树的直径的求法:1.树形DP:声明:用d[x]表示从节点x出发走向以x为根的子树,能够到达的最远节点的距离。edge(x,yi)表示x与子节点yi的连边的长度。那么,d[x]=max{d[yi]+edge(x,yi)} ,其中,yi为x的子节点。简单来讲,就是从节点x出发走向以x为根的子树,能够到...原创 2019-11-03 11:05:40 · 316 阅读 · 0 评论 -
双端队列
由于图中的所有边长度不是0就是1,并且当我们走边长为0的边时不会增大路径的长度,所以我们想到了优先去走边长为0的边。具体来说,我们优先用边长为0的边去更新其到达的节点的dist(最短路径),这样我们就保证了此时该节点的dist一定是最小的,你想想呀,我们之前一直用边长为0的点去更新,如果能更新到它,那么它就是由一个或多个尽量多边长为0的边与源点连接起来的,若更新不到,那么它最多经过这么多边长为0...原创 2019-11-02 08:09:37 · 202 阅读 · 0 评论