- 博客(11)
- 收藏
- 关注
原创 最短路的两种解法Dijkstra和spfa
最短路算法问题描述在加权图上,两点之间的最小边权和路径称为最短路径。常用算法Dijkstra算法Dijkstra算法本质上可以看做一种贪心算法,即每次由已定最短路点集找出最小拓展点,并把最小拓展点并入最短路点集。对于Dijkstra的正确性的证明,我们先证明以下引理:**引理:**对于一个连通的最短路点集,从点集中拓展出的不在最短路点集的最短点,一定是该点的最短点。证明:用反证法(具体就不写了)代码:struct Node{ int id,dist;}Node makeNod
2020-10-17 12:50:58 247
原创 网络流中最大流问题的两种解法以及费用流的解法
网络流问题最大流问题在一张有向图中存在一个源点和汇点,图中的每一条边都有一个最大流量负载值,我们要求的是网络中从源点到汇点的最大流量值。定理:在残量网络中当不存在一条从源点到汇点的增广路时,网络达到最大流。基本算法EKint n,m,s,t,ans,cnt=-1;int prenode[N],preedge[N],flow[N],head[N];bool use[N];queue<int>q;struct Edge{ int pre,to,val;}edge[N&l
2020-10-17 12:48:46 885
原创 强连通分量的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 237
原创 树上点分治题目以及收获和代码
树分治定义记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 218
原创 最近公共祖先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 240
原创 最小生成树的性质和两种实现算法
最小生成树定义给定无向图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 381
原创 与树相关的数据结构
与树相关的数据结构并查集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 213
原创 BFS和DFS相关算法以及相关性质
搜索算法定义当我们在解决多状态问题时,我们可以把每一个状态抽象为一个节点,如果有两个状态a,ba,ba,b,a能够到达b,我们就建立一条从a到b的边。这样我们就能将这个问题转化为图论问题。搜索算法本质是一种高级的枚举。按照一定的策略遍历构建的状态图来得到想要的答案。常见的搜索形式深度优先搜索DFS基本定义时间戳,即某个节点进栈的时间和出栈的时间,我们把一次出栈或者进栈认为是一个单位时间;入栈时间戳即一个节点入栈时的时间节点,即对于节点uuu,d(u)d(u)d(u)为其入栈时间戳出栈时间戳
2020-10-05 17:03:57 391
原创 8421BCD码加法的修正证明
8421BCD码加法的修正证明正数表示的两种定义对于一个正数nnn我们可以将其以两种形式表示公式一:n=∑i=0mAi×10i,∀i∈[0,m],Ai∈[0,9]n=\sum_{i=0}^{m}A_i\times 10^i,\forall i\in[0,m],A_i\in[0,9]n=∑i=0mAi×10i,∀i∈[0,m],Ai∈[0,9]公式二:n=∑i=0mAi×10i,∀i∈[0,m],Ai∈[0,18]n=\sum_{i=0}^{m}A_i\times 10^i,\forall i\
2020-09-18 20:07:31 1571
原创 带权并查集合并
The Union Find with Information of Path1.DefinationProviding 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 156
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人