
最短路径
文章平均质量分 53
FKJDASOI
干饭不积极,思想有问题。
展开
-
强连通分量的个数(Kosaraju)
【题目描述】求一个有向图中强连通分量的个数。【解题思路】先解释一下强连通分量的定义:一个有向图中,如果每两个点都相互连接(可以不直达),那么这个图就是一个强连通,我们可以把一个有向图分解成若干个强连通分量。那么我们应该怎么做呢?首先,从任意一个点开始遍历,记录每个点出栈的顺序。 原理,但我们对一个图进行dfs遍历的时候,我们从最深层开始出栈,如果我们把一个点的出度看作是通往下一层的话,那么我们最先出栈的肯定就是没有出度的了,当一个点的所有出度的点全部出栈了,那么我们也可以看作这个点的出度原创 2022-01-14 09:51:25 · 3343 阅读 · 0 评论 -
P6175 无向图的最小环问题(Floyd)
【题目链接】link【解题思路】题目中说了,至少要有三点才能算一个环,那么我们其实只需要枚举这三个点再将连接他们几个的三条边加起来就可以了。如果做完了Floyd再跑一次枚举三个点,我们会发现时间复杂度会慢一点,所以我们考虑进行一些优化,一边Floyd,一边求最小环,这样我们的时间复杂度会快一点。证明:当我们以 kkk 为中转点的时候,我们 1∼k−11\sim k-11∼k−1 的点一定是处理过的并且结果为最优,那么我们就以 kkk 为一个点,再在 1∼k−11\sim k-11∼k−1 枚举两个原创 2022-01-13 19:59:28 · 272 阅读 · 0 评论 -
P1037 [NOIP2002 普及组] 产生数题解(Floyd求联通问题)
【题目链接】link【解题思路】我们看见这道题很容易就会想到排列组合的乘法原理,但是我们每一位都有多少种可能呢,我们其实可以把这个问题转换成当前这位数字与多少个数字联通,我们这里处理是否联通用的是一种比较大众并且简单易懂的方法——Floyd变形那么我们怎么变形呢我们看一下Floyd的模板For (k = 1; k <= n; k++) For (i = 1; i <= n; i++) For (j = 1; j <= n; j++) If (dis原创 2022-01-13 15:35:52 · 268 阅读 · 0 评论 -
2650 最短缩减路径 (扩展域最短路)
【题目链接】link【解题思路】【思路一】首先,我们看到题目第一时间,可能就想到跑一遍最短路,然后选一条最长的边减半,但是显然我们这种做法是错误的,很容易就可以证伪,你们可以自己思考一下。我们要选择换一种思路,既然他只能把一条边减半,为是么我们不可以建两个图呢,我们在第一个图上的每一个点上都有一个机会减半进入下一层,但是第二层我们是不能返回第一层的,这样我们就可以把题目是实现啦。如图:其中 SSS 为起点 TTT 为终点。这样我们用SPFA跑一遍最短路,答案就轻松求出来了。这道题我们运用原创 2022-01-13 11:17:47 · 140 阅读 · 0 评论 -
最短路模板大全
【题目链接】link【spfa】#include<bits/stdc++.h>using namespace std;int n,m,s;struct note{ int x,y,next,w;}g[500010];int h[500010],tot=0,u,v,w;int d[500010],used[500010]={false};void add(int a,int b,int c){ g[++tot].x=a; g[tot].y=b; g[tot].w=c原创 2022-01-12 16:28:06 · 142 阅读 · 0 评论 -
最短路径问题SSL 1613(Floyed)
【题目描述】平面上有n个点(N<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点直线的距离。现在的任务是找出从一点到另一点之间的最短路径。【解题思路】这是一道最短路径问题的模板题,我们有很多种算法,这里我选用的是Floyed,Floyed的时间复杂度是 Θ(n3)\Theta(n^3)Θ(n3),但是他有一些优点,就是能够处理有负数的边权。那么我们的Floyed应该怎么实现呢?我们如果要原创 2021-12-25 16:00:09 · 1395 阅读 · 0 评论