随笔分类 - 图论—最短路
摘要:潜伏者 题解: 简单的字符串模拟,是一道签到题。 代码: #include<bits/stdc++.h> using namespace std; const int maxn=1e6+7; char s1[maxn]; char s2[maxn]; char p[maxn]; int mp[max
阅读全文
摘要:题目链接 比较综合的题,求最短路肯定都会,但是考虑如何计算最长的公共部分的长度。一开始我想的是跑最短路时记录路径,然后在路径上找公共部分。但是这样其实是错误的想法。因为他们的最短路线可能有多个交集。 实际上需要跑四遍最短路,分别是两人的起点和终点各跑一次,然后将最短路径上的点建新图,同时标记哪些点是
阅读全文
摘要:题目链接 题解: 看到输出的第一行,显然就是最短路,n<=500随便乱搞都可以。而我们看他要使删边过后的代价最小。那么考虑怎样删边,就是删去1-n的最短路上的边。一开始我不知道删边怎么处理,看了题解才知道,这是用的是最基础的网络流。我们先枚举所有点,然后可以把在每一个在最短路上的点建一个新图,然后这
阅读全文
摘要:题目链接 这道题数据范围比较小,所以方法还是比较暴力的。 思路: 先按每个格子的状态,让所有格子与他周围的格子连一条权值为它连向那个格子的值(0或1)。然后我们n方枚举所有格子跑最短路,最短路即为从起点到终点的最小障碍数。然后我们枚举所有最短路,先看他移除障碍后是否只用了小于等于k次机会,然后求出两
阅读全文
摘要:题目链接 这道题有55分都是最短路板子。但是我们肯定不满足于55分,看了题解才知道这道题是一个叫分层图最短路的东西。 对于k次免费机会,相当于建了k层图,每一层的图都是原图上的边权,但是每一层之间所连的边权为0,并且是有向边,我的理解是,因为我们只有一次机会,没有反悔?洛谷上的大佬说的是因为这样才满
阅读全文
摘要:题目链接 这道题是一道图论题,非常显然,题中的目的非常明显,就是统计最短路并求和。n<=100,一看到这个数据范围,就可以想到n^3的Floyd,但是考虑如何来求出最短路的个数? 一开始我想的是Floyd预处理最短路,然后再dijkstra统计最短路个数,因为我只会dijkstra的最短路计数。由于
阅读全文
摘要:题目链接 一句话题意:喊你求出从1出发到所有点的最短路以及所有点的最短路到1的最短路之和。 从1开始跑最短路很容易,直接一遍堆优化dijkstra就完了。 对于其他点到1的最短路又怎么求,不可能一个一个的求,所以想到之前暑假讲关于图论的技巧——建反图。 这样的话问题就迎刃而解了,再在反图上从1开始跑
阅读全文
摘要:题目链接 发现如果没有限制的话,就是最短路的模板题。但是这道题的关键就是要处理题上的限制。我们就可以用一个数组来存哪一天哪个港口不能走,跑最短路的时候特判一下,dijkstra处理出所有天的最短路径。 由于数据范围n<=100,所以n^2*(elogm)的时间复杂度也随便能跑。 接下来又怎么办呢?就
阅读全文
摘要:题目链接 读题发现,题目里有三种连边方式: 1.两点之间连一条有向边。 2.一个点与给定区间中的点连一条有向边。 3.给定区间中的点和一个点连一条有向边。 剩下的就是跑最短路。 两点之间连边很好处理,但是如何在区间之间连边?按平时链式前向星加边,最坏可能是n方的复杂度,建个边都要死。 这时就有线段树
阅读全文
摘要:题目链接 在刘汝佳的那本书上看到了这道题,思路:先预处理出起点到所有点以及终点到所有点的最短路径,然后就是枚举所有的商务边,因为只能有一条商务边,所以最优的路径肯定要么就是起点->商务边起点->商务边终点->终点,要么就是直接起点->终点。时间复杂度为预处理的mlogn加上k次枚举。最后还要递归输出
阅读全文
摘要:现在我才明白,自己之前做的最短路的题是有多么垃圾。 题面很长,但其实就说的是一个中间商赚差价的故事。图论的题目一般来说建图往往是核心,而这道题的巧妙之处是在于它需要建两个图:正图和反图,正图是1-n的路径,而反图则是从n反推到1。 题目要求我们去的在某个城市买,回来又在某个城市卖出,可以维护两个值,
阅读全文
摘要:思路:这道题看n的范围很小(n<=200),显然就用floyd可以解决的问题,但又并不是简单的floyd算法,还是需要一些小小的变化。一开始我的思路是先跑一次弗洛伊德最短路,这样子显然复杂度很高,并且题目中的路径长度是时刻可能更新的,所以我们应该在修建的时候再跑最短路。可以用一个变量来记录修改的点,
阅读全文

浙公网安备 33010602011771号