首页 > 其他分享 >最短路

最短路

时间:2024-08-03 20:09:08浏览次数:8  
标签:闭包 结点 int 短路 Floyd dis

Floyd

三方,顺序是 \(k,i,j\),理由是我们定义的数组 f[k][x][y],表示只允许经过结点 \(1\) 到 \(k\)(也就是说,在子图 \(V'={1, 2, \ldots, k}\) 中的路径,注意,\(x\) 与 \(y\) 不一定在这个子图中),结点 \(x\) 到结点 \(y\) 的最短路长度,可以压掉一维。

for (int k = 1; k <= n; k++)
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++)
			f[i][j] = min(f[i][j], f[i][k] + f[k][j]);

P6175 正权无向图最小环

在递推 Floyd 的时候,顺便枚举了两个点和其中继点。我们就可以把 \(dis(i,j),(i,k),(k,j)\) 共同构成的环更新答案。我们知道,\(dis(i,j)\) 一定是只经过前 \(k\) 个点的条件下最小的(尽管可能不止一条边连接),所以这是当前 \((i,k,j)\) 环的最小答案。

for (int k = 1; k <= n; k++)
{
	/*
	i = j 是无意义的
	i = k 或 j = k 也是无意义的
	*/
	for (int i = 1; i <= k - 1; i++)
	{
		for (int j = i + 1; j <= k - 1; j++)
			ans = min(ans, dis[i][j] + a[i][k] + a[k][j]);
	}
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
			dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
	}
}

B3611 【模板】传递闭包

给定无向图邻接矩阵,求出传递闭包。

传递闭包:表示两点间是否能通达。

也使用 Floyd,只不过 min 变成了 1/0 问题。

// 这样做是显然的
for (int k = 1; k <= n; k++)
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++)
			dis[i][j] = (dis[i][j] || (dis[i][k] && dis[k][j]));

也可以用 Bitset 优化到 \(O(\frac{n^3}{w})\)。

bitset<maxn> a[maxn];
for (int k = 1; k <= n; k++)
{
	for (int i = 1; i <= n; i++)
	{
		if (a[i][k])	  // 若 i k 连通
			a[i] |= a[k]; // i 也能到 k 能到的点
	}
}

标签:闭包,结点,int,短路,Floyd,dis
From: https://www.cnblogs.com/tai-chi/p/18340966

相关文章

  • 【GeoScene】一、创建、发布路网服务,并在代码中测试最短路径分析
    前言网上关于GeoScene及GeoSceneAPIforJavaScript的资料太少了,官方的技术支持又太慢了,最近把在项目中踩过的坑分享出来;**版本信息**GeoScenePro4.0GeoSceneEnterprise3.1GeoSceneAPIforJavaScript4.27.4一、创建网络分析图层1、在地理数据库中新建......
  • 解密编程的八大法宝(四)(附二分查找、分治法和图论算法(深度和广度优先搜索、最短路径、最
    算法题中常见的几大解题方法有以下几种::暴力枚举法(BruteForce):这是最基本的解题方法,直接尝试所有可能的组合或排列来找到答案。这种方法适用于问题规模较小的情况,但在大多数情况下效率不高。贪心算法(GreedyAlgorithm):贪心算法在每一步都选择当前看起来最优的解,希望最终能......
  • 最短路计数
    //最短路计数.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///**https://loj.ac/p/10077【题目描述】给出一个N个顶点M条边的无向无权图,顶点编号为1∼N。问从顶点1开始,到其他每个点的最短路有几条。输入格式第一行包含2个正整数N,M,为图的顶......
  • 观光 最短路次短路
    //观光.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*https://www.acwing.com/problem/content/description/385/“您的个人假期”旅行社组织了一次比荷卢经济联盟的巴士之旅。比荷卢经济联盟有很多公交线路。每天公共汽车都会从一座城市开往另一......
  • Luogu P1613 跑路 题解 [ 蓝 ] [ 倍增 ] [ Floyd 最短路 ] [ 状压 dp ]
    跑路:绝佳倍增好题,思路是化\(2^k\)为\(1\),倍增起预处理作用。最近不知道是撞了什么运,前一脚看的是绿题,写完之后交一发,发现直接被lxl升蓝了,血赚。思路:Floyd首先观察到每次走\(2^k\)的代价为\(1\),我们可以预处理出每次走\(2^i\)能到哪些点。但为了让这题的代码更好实......
  • 关于最短路、次短路计数
    最短路计数题意给出一个 \(N\) 个顶点 \(M\) 条边的无向无权图,顶点编号为 \(1\) 到 \(N\)。问从顶点 \(1\) 开始,到其他每个点的最短路有几条。分析我们可以用BFS计算出源点\(1\)到其他点的最短距离序列\(dis\),由于BFS弹出队列的顺序是拓扑序,因此在BFS的过......
  • 【变压器的开路和短路试验】提供从开路和短路试验中获得的结果电阻性和感性参数(Simuli
      ......
  • 最短路
    floyd——最短路里玩最花的dij——跑得很快spfa——差分约束&费用流01bfs——边权只有两个时候最快求最小环首先floyd中\(f[i][j][k]\)代表从i到j中间只经过编号小于等于k的节点的最小值。那么我们可以想到一个环满足i-j的优弧(类似这么叫),然后剩下一个点编号大于k,直接加上边权......
  • 【学习笔记】最短路
    【学习笔记】最短路前言:只是对一些最短路算法的实现整理。以下内容有部分摘自OI_wiki。Floyd算法求全源最短路。可以有负边权。Floyd算法的本质是动态规划。设\(dis(k,i,j)\)表示由若干个编号不超过\(k\)的节点中转后从\(i\)到\(j\)的最短路。该“动规”有两......
  • 【MATLAB源码-第159期】基于matlab的胡桃夹子优化算法(NOA)机器人栅格路径规划,输出做短
    操作环境:MATLAB2022a1、算法描述胡桃夹子优化算法(NutcrackerOptimizationAlgorithm,NOA)是一个灵感来源于胡桃夹子的故事的元启发式优化算法。这个故事中,胡桃夹子是一个能够将坚果壳轻易地破开以获取内部果仁的工具。在优化算法的语境下,这个过程被比喻为寻找问题解决方案......