![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
图论
文章平均质量分 80
图论相关
Clarence Liu
这个作者很懒,什么都没留下…
展开
-
最小斯坦纳树算法介绍
斯坦纳树原创 2023-12-07 01:30:51 · 1194 阅读 · 3 评论 -
网络流及几种算法FF、EK、Dinic
网络流原创 2022-12-26 08:58:10 · 730 阅读 · 0 评论 -
Codeforces Round #809 (Div. 2) E. Qpwoeirut and Vertices kruskal重构树+LCA+ST表
Codeforces Round #809 (Div. 2)原创 2022-07-20 21:52:57 · 205 阅读 · 0 评论 -
差分约束.
概念给你若干组约束条件,一般是a1−a2≤k1,a2−a3≤k2...a_1-a_2\leq k_1,a_2-a_3\leq k_2...a1−a2≤k1,a2−a3≤k2...这种,让你判断这一组方程是否有解,或者求一组合法解做法在最短路中,设有边u->v,边权为w,则有三角不等式dis[v]≤dis[u]+wdis[v]\leq dis[u]+wdis[v]≤dis[u]+w,那么上述约束条件就可以转化为a1≤a2+k1a_1\leq a_2+k_1a1≤a2+k1,原创 2022-04-21 16:20:08 · 154 阅读 · 0 评论 -
[BJWC2010] 严格次小生成树 简单梳理和整理
https://www.luogu.com.cn/problem/P4180这篇文章将会默认读者已经掌握了LCA,kruskal等相关基础知识点考虑最小生成树的kruskalkruskalkruskal算法,我们构造好一颗最小生成树以后,如何找到次小?容易想到,我们依然按照贪心策略,再加入一条边权最小的边,那么此时一定出现了环,那么我们把这个环上除了刚才加进来的这条边以外最大的那条边删除掉,得到的就是次小生成树。如何证明,考虑这样几条边a,b,c,d,(a<b<c<d)a,b,原创 2021-11-02 16:25:47 · 147 阅读 · 0 评论 -
2 - sat 原理和简单例题
问题有nnn个布尔变量,其中一些布尔变量之间有限制关系,用所有nnn个布尔变量组成序列,使得其满足所有限制关系;判断序列是否存在,这就是SAT(Satisfiability)SAT(Satisfiability)SAT(Satisfiability)问题,如果每个限制关系只涉及两个变量,则是2−SAT2-SAT2−SAT问题因为方案的数量是O(2n)O(2^n)O(2n)的,所以一般只输出有无方案或者输出一组方案(字典序最小)等等原理就只用语言描述了,不懂可以看oi-wiki或者知乎或者洛原创 2022-02-19 10:07:24 · 412 阅读 · 0 评论 -
双连通分量回顾与总结
双连通分量定义点双连通分量割点割边边双连通分量定义点双连通分量割点割边边双连通分量原创 2022-02-17 21:48:10 · 474 阅读 · 0 评论 -
匈牙利算法求解二分图最大匹配问题
这是一个非常简单的问题,描述如下,给你两部分的点,问你最大匹配数是多少、简单描述一下算法流程,首先我们先匹配左边,蓝1先匹配红2;接下来到蓝2,只能匹配红2,但是这这时候发现红2已经有主了,根据匈牙利算法思想,这时候回溯,找谁匹配的红2,发现是蓝1,那么这时候看看蓝1还有没有别的选择,一看可以是红4,所以这时候让蓝1匹配红4,蓝2匹配红2;之后是蓝3,先让他匹配红1,没矛盾;现在得到的二分图如下所示那么现在轮到蓝4了,他只能跟红4匹配,但是红4已经有主了,这时候回溯看蓝1,他还有一个选择是红2,但原创 2021-11-22 00:01:36 · 1180 阅读 · 0 评论 -
树链剖分----使用线段树维护
在这里插入代码片原创 2021-07-19 21:51:53 · 461 阅读 · 0 评论 -
使用Tarjan算法计算强连通分量
SCC强连通分量Tarjan算法求解SCC练习强连通分量强连通分量(Strongly Connected Component)简称SCC首先要理解一个定义,什么是强连通分量所谓强连通,有两个点uuu和vvv,从uuu到vvv有一条路径,从vvv到uuu也有一条路径,那么说这两个点之间是强连通的,也叫做互相可达;如果一个有向图GGG中的任意两个点之间都是强连通的,那么就说这个图是一个强连通图强连通分量。如果一个有向图GGG不是强连通图,那么可以把它分成多个子图,且每个子图的内部是强连通的,而且这些原创 2021-07-02 20:05:15 · 213 阅读 · 1 评论 -
虚点连边求解洛谷P3393逃离僵尸岛
题目给出了若干个定义为被僵尸控制的城市,意思就是不能进入;若干个安全的城市花费为ppp,若干个危险的城市花费为qqq,现在问从111到nnn的最少花费思路很清晰,我们显然需要求出所有的危险城市的标号,这样跑一遍dijkstradijkstradijkstra就行了,问题是如何高效地筛选出危险城市呢?和僵尸控制的城市之间距离小于sss的城市被称为危险城市,因为僵尸控制的城市是给定的,如果想从每个僵尸控制的城市出发跑若干次最短路,无疑是正确的,但是时间上显然有些紧张,因为数据范围是10510^5105,那原创 2021-06-30 16:21:26 · 133 阅读 · 0 评论 -
倍增求解最近公共祖先(LCA)问题
Lowest Common Ancestors介绍简要分析和朴素思路倍增算法介绍对于一棵树,常常有这样的问题,如下图,求出6和8节点的最近公共祖先节点祖先节点就是指当前节点沿着链向上经过的节点,最近公共祖先节点就是两个询问节点沿着树链往上走直至相遇的第一个节点简要分析和朴素思路看完问题介绍直接能想到的做法就是沿着节点往上走,直到两个节点相遇,第一个位置就是LCA,为了验证这个想法,还是要找道题试一试模板题首先要建图,刚开始学习算法,主要掌握算法原理,除此之外越方便越好,那么最方便的建图原创 2021-02-11 11:50:08 · 737 阅读 · 0 评论 -
最短路练习题
目录Til the Cows Come HomeFroggerHeavy TransportationTil the Cows Come HomeTil the Cows Come Home模板题,注意输入顺序是先ttt后nnn#include <iostream>#include <queue>#include <cstring>using namespace std;const int MAXN = 1005;struct st{ int ID原创 2021-05-21 09:51:18 · 133 阅读 · 0 评论 -
洛谷P1330 封锁阳光大学
题意是这样的,给出n个点和m条道路,标记一个点可以封锁以这个点为起点或者终点的道路,不能标记相邻点,问能不能成功,如果能成功,最少需要多少次标记才能封锁所有道路这道题是一个涂色问题,可以这样考虑,从任意一个顶点开始涂色,比如涂成黑色,相当于做了一个标记,那么和它直接相连的其他点就不需要标记了,也就是将其他点涂成白色,那么对于这个点,进行标记的次数对于答案的贡献就是白色点数和黑色点数的最小值因为每次枚举都需要将顶点染成黑色,在涂色的过程中如果发现当前染成黑色的节点的邻接节点竟然已经染成了黑色或者当前染成原创 2021-05-15 15:45:49 · 102 阅读 · 0 评论 -
dijkstra算法及其优化
dijstra算法算法概要简单实现算法优化链式前向星堆优化算法概要dijstra算法与prim有些类似,都可以分为三个步骤,即:update、scan、add,用一个数组dis记录起点到其他节点的最短距离。从一个节点出发,先扫一遍他连的所有边,取最小值更新dis数组,这是update;接着扫一遍dis数组,找到最小的那一个,也就是从起点出发的一条路径,这就是scan操作;最后将找到的节点加入到找好的节点集合中。这个视频动画演示很形象简单实现用这道题测试一下程序模板题#include <原创 2021-01-19 23:53:30 · 189 阅读 · 0 评论 -
Floyd-Warshall算法及例题
Floyd算法概要练习练习一练习二概要Floyd可以一次性求出所有节点之间的最短距离这种算法主要采用了动态规划的思想,假设求从i到j的最短路径,那么寻找一个中间位置k,如果从i到k距离加上k到j的距离比直接从i到j小,那么就更新从i到j的最短路径根据上面的设想,Floyd是由三层for循环组成的,第一层for循环显然是k,因为我们不知道谁来借助k,所以k应该放在最外面;里面的两层分别是i和j,这不难理解。朴素的Floyd如下void Floyd(int n){ for(int k=1原创 2021-01-18 21:28:29 · 1002 阅读 · 0 评论 -
POJ2031
题目大意给你n个空间直角坐标作为球心,告诉你球的半径,在球表面之间修路,问路最少修多长能够使得球相互可达练习一下简单的最小生成树首先需要解决几个问题建图如何判断球之间不需要修路一共只有不到100个输入,所以可以两两之间计算路径长,用并查集判断球之间不需要修路,之后就是正常的最小生成树了#include <iostream>#include <algorithm>#include <cstdio>#include <cmath>usin原创 2021-01-03 20:10:25 · 124 阅读 · 0 评论 -
AOE网的关键路径
目录引入AOE网的判断拓扑排序事件的最早发生时间和最晚发生时间活动的最早开始时间和最晚开始时间引入生活中往往有着这样的场景,我们想做一件事情,但是需要做其他的事情来达到这件事情,例如,学数据结构之前,首先需要学一门程序设计语言,还要学习离散数学,如果学语言需要耗费半年时间,学离散数学需要一年事件,那么我们能学数据结构需要的最短时间是一年但是,这样的场景往往出现在工程项目中,往往有许许多多的事件和活动,我们需要做的是找到能够影响整个工程进行时间的那一条路径,这个过程类似于木桶原理,这条路径应该是最长的原创 2021-01-03 11:00:28 · 468 阅读 · 0 评论 -
最小生成树算法及例题
什么是生成树?对连通图进行遍历,过程中经过的点和边的组合可看成一棵树,也叫生成树目录最小生成树引入Prim算法习题Kruskal算法一个非常好的学习视频最小生成树引入世界上有着许许多多的铁路线、公路线,想要从一个城市到另一个城市修一条线路需要许多资金,当然,修路的方式有多种多样,现在我们想知道如何修路能使得这些城市之间形成一个通信网,并且使得总耗费最少呢?假设有n个城市,那么我们最少需要修n-1条路,这是明显的,把这些路连在一起,加上城市节点,就构成了一棵生成树,在这些生成树中,边权之和最小的.原创 2021-01-01 21:34:00 · 2057 阅读 · 0 评论