图论
不会JAVA的运营不是好数分
这个作者很懒,什么都没留下…
展开
-
2016 D2T1 P3958 奶酪
P3958 奶酪https://www.luogu.com.cn/problem/P3958题意你要从最低点走到最高点,你必须从与下边界联通的洞孔开始走,而且每次只能走到和你所在奶酪相连通的奶酪.对于两个奶酪而言,他们的距离必须小于2×r,才被认为是相通的.距离公式如下:想法本质上是:BFS走空间迷宫首先对于一道搜索题目而言的话,我们还是有基本的三点目标目标一:方向指示数组: 对于这道题目而言,显然每一个和它相连通的洞都可以,所以这道题目的方向指示数组形同虚设.目标二:边界原创 2020-07-31 14:48:31 · 114 阅读 · 0 评论 -
d2t2 P3959 宝藏
P3959 宝藏https://www.luogu.com.cn/problem/P3959题意总体而言:找到最小生成树中,代价最小的点。想法状压DP状态压缩类动态规划,状压dp一般会有明显的数据范围特征,即n,m一般都在20以内。因为int的值一般是 32bit.https://www.acwing.com/solution/content/4026/https://www.acwing.com/activity/content/code/content/144885/挖个坑。这里比较抽原创 2020-07-17 10:12:19 · 168 阅读 · 0 评论 -
2015 d1t2 信息传递
信息传递https://www.luogu.com.cn/problem/P2661题意有n个孩子,每一个孩子都有一个伙伴,他能把自己的生日告诉他,但是不能告诉别人。(如果他知道别人的生日也一同告诉)当有人从别人口中得知自 己的生日时,游戏结束。分析其实这道题就要求一个图中的最小环的节点数。为什么呢。我们来看看。根据题意。这个消息传递,可以看做从该点传到信息传递对象,由信息传递对象传给它们的公共父亲,再传回成环。我们来看个例子:输入52 4 2 3 1解释:5个孩子,1号的好伙原创 2020-07-05 20:27:01 · 192 阅读 · 0 评论 -
Tarjan算法——求强连通分量
这里参考几篇博客。留个坑,等下次自己把原理总结一下。如果需要快速了解。可以把这几个博客看一下:csdn原理讲的很清楚视频讲解,绘图一下就明白了扩展内容模板原创 2020-07-05 17:28:50 · 223 阅读 · 0 评论 -
04 P5663 加工零件
04 P5663 加工零件https://www.luogu.com.cn/problem/P5663题意概括n个点,m条边的无向无权图。如果某点需要零件为 LL = 1,需要该点的所有相连的点,提供原材料L > 1,需要该点的所有相连的点,提供L-1的产品固定起点1问,接下来q次访问,1是否需要提供原料。提供 - YES不- No想法一dfs+暴力 (时间复杂度太大)从询问的起点 s出发,dfs遍历到最后一个点。如果是 1号点,那么就1号点就需要提供原材原创 2020-06-26 20:49:47 · 349 阅读 · 0 评论 -
生成树 : P1656 炸铁路
P1656 炸铁路https://www.luogu.com.cn/problem/P1656题意n个城市,m条铁路只有一发炮弹,炸某一条路。让其不成互相连接输出 必须按照 a 从小到大排序输出;如果a 相同,则根据 b从小到大排序。1 25 6想法生成树+遍历遍历每一条边,如果删除是否能够变为一个生成树//// Created by majoe on 2020/6/3.//#include <bits/stdc++.h>using namespace s原创 2020-06-03 16:56:52 · 270 阅读 · 0 评论 -
二分图原理及应用
二分图什么是二分图?G=(V, E),其中G代表图,V代表这个图的所有顶点的集合,E代表这个图所有连线的集合,即是边集。现如今如果能将V这个顶点集分成两个互不相交的子集A、B,E这个边集内所有边的两个顶点分别属于*A、B两个子集的话,我们就称这个图为二分图。要点无向图所有点分成A,B两个不相交的集合所有边,都在着两个集合之间。同一个集合不能有边。二分图应用如何检测二分图? 染色二分图最大匹配?匈牙利算法如何检测二分图?染色法如果我们能够把图中的所有顶点分成两部分,原创 2020-06-03 11:32:19 · 3920 阅读 · 4 评论 -
最短路:算法基本原理和比较
最短路基本原理和比较总体而言,对于一个n点m条边的图来说。最短路分为:单源和多源。按适用条件划分如下:需要注意的事项和基本原理Dijkstra-朴素O(n^2) 初始化距离数组, dist[1] = 0, dist[i] = inf; for n次循环 每次循环确定一个min加入S集合中,n次之后就得出所有的最短距离 将不在S中dist_min的点->t t->S加入最短路集合 用t更新到其他点的距离Dijkstra-堆优化O(ml原创 2020-06-03 08:31:13 · 454 阅读 · 0 评论 -
最短路:朴素Dijkstra和堆优化版Dijkstra
朴素Dijkstra和堆优化版Dijkstra总体思路将所有的顶点分为两个部分:已知最短距离的顶点集合P和未知最短距离的顶点集合Q。最开始的时候,已知最短距离的顶点集合中只有源点。初始化distance数组,将源点s到自己的距离设置为0,到其他顶点的距离姑且设置为Infinity。依据distance数组,在未知顶点集合Q中选出距离源点最近的一个顶点u,放入P中,并考察所有以u为起点的边,以u作为中转点,检验是否能够减短源点到其他点的距离。如果有,就更新distance数组。这一步又叫松弛(rel原创 2020-06-03 08:24:10 · 384 阅读 · 1 评论 -
最短路:Floyd求多源最短路
Floyd求多源最短路算法特点时间复杂度:时间复杂度为O(n^3);可以求多源最短路想法思想从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。所以,我们假设dist(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查dist(i,k) + dist(k,j) < dist(i,j)是否成立,如果成立,证明从i到k再到j的路径比i直接到j的路径短,我们便设置dist(i,j) = dist(i,k) + dist(k原创 2020-06-03 08:22:13 · 179 阅读 · 0 评论 -
最短路:Bellman-Ford和SPFA求最短路和负环
Bellman-Ford和SPFA求最短路Bellman-Ford时间复杂度 O(nm), n 表示点数,m 表示边数最大特点:能找到负环得到不超过k条路的最短路,例如:要求解决最多只能完成K次飞行,在完成K飞行时的最短路。注意:backup是备份上一次的dist数组。int n, m; // n表示点数,m表示边数int dist[N]; // dist[x]存储1到x的最短路距离struct Edge{ int a, b, w;} edge原创 2020-06-03 08:20:47 · 259 阅读 · 0 评论 -
拓扑排序原理
拓扑排序在图论中,**拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)**的所有顶点的线性序列。且该序列必须满足下面两个条件:1、每个顶点出现且只出现一次。2、若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。算法思想拓扑排序流程为BFS流程如下1 首先找到第一个入度为0 的点 放入待处理队列,记录答案拓扑数组中原创 2020-06-02 11:08:23 · 355 阅读 · 0 评论 -
图的储存-邻接表和邻接矩阵
图的储存图的建立有两个问题要解决。用什么数据结构存储 (邻接表和邻接矩阵)图有有两种类型。有向图和无向图应该如何表示。 (无向图表示,两点互相有边指向,这样可以统一都用有向图的方式来储存)储存结构如果有n个点,m条边的图。他们可以用邻接表和邻接矩阵表示。邻接矩阵g[a][b] 存储边a->b时间复杂度O(n^2)邻接表(用数组来模拟链表)其实和链式前向星是一回事,如果不明白。可以去看看那个笔记的图。用数组来模拟链表head[i]表示以i为起点的头节点。也就原创 2020-06-02 11:07:16 · 370 阅读 · 0 评论 -
链式前向星原理和遍历
链式前向星作用储存图中边的数据结构。举例由如下图,需要将其关系进行储存储存关系如下:解释如下:head[i]表示以i为起点的第一条边int to; //这条边的终点int w; //权值int next; //兄弟边结构如下定义边的结构体将边加入前向星中遍历前向星边的结构体struct EDGE{ int to; //这条边的终点 int w; //权值 int next; //兄弟原创 2020-06-02 11:04:36 · 737 阅读 · 0 评论