上一页 1 ··· 30 31 32 33 34 35 36 37 38 ··· 75 下一页
摘要: 原题链接 考察:Floyd+输出路径 错误思路: 跑一遍Floyd,记录使g[i][j]>g[i][k]+g[k][j]+w[k] 变小的k.分为[l,k] [k,r]输出路径. 当g[i][j] = g[i][k]+g[k][j]+w[k],比较path[i][j] 与当前枚举点k的大小. 错误原 阅读全文
posted @ 2021-05-03 17:07 acmloser 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 原题链接 考察:Floyd+矩阵快速幂 思路: 前面讲过Floyd算法的第一层循环是i~j的最短路,经过1~k的结点.在这里我们将Floyd的dp状态表示f[k,i,j]. 假设i经过a条边到达S, f[k,i,j] = f[a,i,S]+f[k-a,S,j] 我们可以发现前a条边的路径与后面的路径 阅读全文
posted @ 2021-05-03 09:12 acmloser 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 原题链接 考察:Floyd 思路: 考察Floyd算法应用之最小环.在应用Floyd之前我们先了解Floyd的本质. 1 for(int k=1;k<=n;k++)//起点到终点之间经过1~k点 2 for(int i=1;i<=n;i++)//枚举起点 3 for(int j=1;j<=n;j++ 阅读全文
posted @ 2021-05-02 22:52 acmloser 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 原题链接 考察:Floyd 思路: 传递闭包应用题.也可以用拓扑排序,这里先练下传递闭包.拓扑排序以后补 传递闭包模板: 1 for(int k=1;k<=n;k++) 2 for(int i=1;i<=n;i++) 3 for(int j=1;j<=n;j++) 4 if(g[i][k]&&g[k 阅读全文
posted @ 2021-05-02 11:25 acmloser 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 原题链接 考察:最短路 思路: 较水,正反向建图求和. 1 #include <iostream> 2 #include <cstring> 3 #include <queue> 4 using namespace std; 5 typedef long long LL; 6 typedef pai 阅读全文
posted @ 2021-05-01 23:40 acmloser 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 原题链接 考察:最短路+思维 完全不会,废物本废 错误思路: 比较明显的思路就是以每个特殊点为起点,然后Dijkstra,再以每个特殊点为终点求最小值,显而易见地TLE 解法一(官方题解): 由暴力思路延伸来的思路.因为我们只需要知道最小值,而不是特殊点.所以起点和终点是谁无所谓.所以可以将上述的一 阅读全文
posted @ 2021-05-01 22:41 acmloser 阅读(70) 评论(0) 推荐(0) 编辑
摘要: 原题链接 考察:最短路 思路: 拆点.只有一个状态不足以求出最小花费,需要再加上当前点用了几次免费机会. 坑点: 存在起点与终点经过路线<k的情况,这时候用不到k次机会,所以直接返回0的贪心是错的.... 1 #include <iostream> 2 #include <cstring> 3 #i 阅读全文
posted @ 2021-05-01 16:48 acmloser 阅读(55) 评论(0) 推荐(0) 编辑
摘要: 原题链接 考察:最短路 思路: 很容易看出t就是一般最短路的权值,快速地打了一遍dijkstra板子结果发现输出结果和样例不一样,那么答案错在哪里呢? 我们调试一下就可以发现,到达中间某点的耗时晚,不一定到达终点就晚,因为到达时间由到达每个点的时间和速度决定. 之前说过最短路可以和dp联系起来,那么 阅读全文
posted @ 2021-05-01 13:32 acmloser 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 原题链接 考察:最短路+二分 思路: 二分最多的一次收取的费用的最小值,对于每一个二分值跑一遍最短路,最后判断n点是否可达即可.这里的check函数的思路类似二分经典题:搬石头 long long数组的极大值可以初始化为memset(数组,63,size) 1 #include <iostream> 阅读全文
posted @ 2021-05-01 11:40 acmloser 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 原题链接 考察:最短路 思路: 是模板题.Johnson算法主要用于处理负权边,它可以让Dijkstra算法计算带负权的最短路问题. 具体的做法是:建立虚点0,再让0与每个点连一条边,求出0到每个点的最短路,将(u,v)之间的权值w = w+dist[u]-dist[v]. 这样w一定为正,因为最短 阅读全文
posted @ 2021-05-01 10:33 acmloser 阅读(49) 评论(0) 推荐(0) 编辑
上一页 1 ··· 30 31 32 33 34 35 36 37 38 ··· 75 下一页