算法
吉子尔博
这个作者很懒,什么都没留下…
展开
-
最短路的两种解法Dijkstra和spfa
最短路算法 问题描述 在加权图上,两点之间的最小边权和路径称为最短路径。 常用算法 Dijkstra算法 Dijkstra算法本质上可以看做一种贪心算法,即每次由已定最短路点集找出最小拓展点,并把最小拓展点并入最短路点集。 对于Dijkstra的正确性的证明,我们先证明以下引理: **引理:**对于一个连通的最短路点集,从点集中拓展出的不在最短路点集的最短点,一定是该点的最短点。 证明:用反证法(具体就不写了) 代码: struct Node{ int id,dist; } Node makeNod原创 2020-10-17 12:50:58 · 194 阅读 · 0 评论 -
强连通分量的Tarjan算法
有向图的强连通分量(SCC)算法 强联通分量定义 给定有向图G(V,E)G(V,E)G(V,E); 若u,v∈Vu,v\in Vu,v∈V,我们定义函数J[u][v]J[u][v]J[u][v],若uuu可以到达vvv,则有J[u][v]=1J[u][v]=1J[u][v]=1,否则J[u][v]=0J[u][v]=0J[u][v]=0; 对于非空点集Ci⊂VC_i\subset VCi⊂V,且∀u,v∈Ci,J[u][v]=J[v][u]=1\forall u,v\in C_i,J[u][v]=J[v]原创 2020-10-13 15:56:23 · 195 阅读 · 0 评论 -
树上点分治题目以及收获和代码
树分治 定义 记VuV_uVu表示以uuu为根的子树中节点的集合。 记SuS_uSu表示节点uuu的直接子节点集。 记dis(i,j)dis(i,j)dis(i,j)为节点i,ji,ji,j之间的距离。 经典例题 洛谷P3806 【模板】点分治1 题意:给定一棵有 n 个点的树,询问树上距离为 k的点对是否存在。 题目链接:https://www.luogu.com.cn/problem/P3806 点分治 问题分析 考虑分治,计算所有以uuu为根的子树中满足条件的点对数,可以发现所有路径可以分为经过u原创 2020-10-13 14:22:06 · 172 阅读 · 0 评论 -
最近公共祖先LCA的两种算法Tarjan和倍增
最近公共祖先LCA 问题描述 对于给定的无向图G(V,E),∣V∣=n,∣E∣=mG(V,E),|V|=n,|E|=mG(V,E),∣V∣=n,∣E∣=m是一棵有根树,对于树上的两个节点u,vu,vu,v必然存在一条简单路径记为Path(u,v)Path(u,v)Path(u,v),定义这条路径上深度最小的点为u,vu,vu,v的最近公共祖先,简写为LCALCALCA. 解决方案 倍增算法 倍增算法是由暴力算法优化而来的,即通过将u,vu,vu,v节点逐层向上移动的方式来得到u,vu,vu,v的最近公共祖先原创 2020-10-11 19:52:41 · 191 阅读 · 0 评论 -
最小生成树的性质和两种实现算法
最小生成树 定义 给定无向图G(V,E)G(V,E)G(V,E),∣V∣=n,∣E∣=m|V|=n,|E|=m∣V∣=n,∣E∣=m. 对于EEE我们定义一个边权函数,即∀(u,v)∈E,\forall (u,v)\in E,∀(u,v)∈E,存在唯一实数w(u,v)w(u,v)w(u,v). 若边集EsE_sEs满足∣Es∣=n−1|E_s|=n-1∣Es∣=n−1且EsE_sEs覆盖了点VVV我们就称边集EsE_sEs为一个最小生成树边集. 对于生成树边集EsE_sEs,定义边权和函数w(Es原创 2020-10-11 10:53:45 · 326 阅读 · 0 评论 -
与树相关的数据结构
与树相关的数据结构 并查集UFS 描述和定义 在处理图论问题中常常会涉及到添加边的操作,而此时为了方便地得到此时图的连通状况,我们就需要并查集来维护图中节点的连通状况。并查集顾名思义,即支持对集合进行合并和查询的数据结构。为了便于描述给出如下定义 在图G(V,E)G(V,E)G(V,E)中,初始状态可视为E=∅E=\emptyE=∅,并且定义连通的点为一个集合。对于节点uuu,我们定义函数f(u)f(u)f(u)表示u节点第一次合并入另一个集合时该集合的代表节点,集合的代表结点属于集合本身,连通块中节点的代原创 2020-10-07 23:50:48 · 191 阅读 · 0 评论 -
带权并查集合并
The Union Find with Information of Path 1.Defination Providing a connected graph G(V,E)G(V,E)G(V,E), we number all points from 1 to n. For the sake of brevity, we use the corresponding number to identify the node. Define for ∀i∈V,\forall i\in V,∀i∈V,the i原创 2020-09-17 00:22:47 · 123 阅读 · 0 评论