最短路
_kikyou-
这个作者很懒,什么都没留下…
展开
-
CF1528D(n² dij+增边优化建图)
传送门题意:给定有向图,n个点,m条边。第i条边在0时刻由a[i]->b[i]代价c[i] 。每过t时刻,第i条边变成由a[i]->(b[i]+t)%n ,代价仍是c[i] 。对于每个出发点0~n-1,求出到其余点的最短路。(2<=n<=600,n<=m<=n²)分析:首先肯定是考虑跑dijkstra,这题的边数会达到n²,堆优化的dij时间的mlogn,所以得用普通版本的dij,时间复杂度是O(n²)。每个点在松弛过程中,由于我们可以在某个点停留,所以需要原创 2021-05-26 20:27:28 · 185 阅读 · 0 评论 -
Codeforces Round #719 (Div. 3)G. To Go Or Not To Go?(bfs+思维)
题目链接题意:给定n*m的地图 ,大于0的数字格子可以互相传送 ,代价是传送起点+传送终点格子上的数字和,-1的格子不能走,保证(1,1)和(n,m)不为-1 。问(1,1)到(n,m)的最小代价是多少?分析:虽然图上给了最多n²个传送门,但是考虑到x1,y1传送到x2,y2的代价为a[x1][y1]+a[x2][y2],也就是说如果我们要从A传送到B,那么直接A->B绝对比A->C->B要更优 。 所以我们要么就传送一次,要么就一次也不传送。我们分别从起点和终点进行bfs,每次记原创 2021-05-07 20:58:16 · 122 阅读 · 0 评论 -
P4568 [JLOI2011]飞行路线 (最短路+dp)
题目链接题意:最短路模板题 + 可以有k次机会免费走某条边分析:dist[i][j]表示出发点到i 使用j次机会的最短路。跑dij的流程基本和裸的dij一致。每次松弛的时候可以选择使用/不使用一次机会。 分别更新对应的状态即可。#include<bits/stdc++.h>using namespace std;#define ll long long#define pii pair<int,int>const int maxn = 5e4+10;const in原创 2021-04-01 00:02:00 · 52 阅读 · 0 评论 -
Codeforces1472 G. Moving to the Capital(记忆化搜索)
给定n个点m条边的有向图,点1为首都,设d(i)为点1到点i的最短路长度。假设一开始你在点i,你下一步有3种走法:1.从点i走到点j,同时满足有路且d(i)<d(j)2.从点i走到点j,同时满足有路且d(i)>=d(j)3.停止走动第2种走法最多执行一次,现在问对于每个点i,走若干次后到达的点s的d(s)最小是多少(即尽量靠近点1)。数据范围:n,m<=2e5,保证点1可以到达任意城市.分析:由于终点1是确定的,所以每个点的答案也是确定的,并且更靠近1的点的答案可以转移得原创 2021-03-25 23:41:55 · 116 阅读 · 0 评论 -
Frogger POJ - 2253 +Heavy Transportation POJ - 1797(最短路变形floyd+dijkstra)
题目链接题意:坐标轴上给出了n个点的坐标,求顶点1 2之间的最短路。这里最短路的定义为:1到2的所有路径中,各路径最长边中的最小值。 (2<=n<=200)思路:传统意义上最短路是顶点路径的边权之和,这里改成边的最大值即可。用Floyd和dijkstra都可以做。思路见代码。#include<iostream>#include<algorithm>#include<cstdio>#include<stdlib.h>#include原创 2021-01-12 00:18:03 · 105 阅读 · 0 评论