摘要: 原题链接 考察:Floyd 思路: 每次0操作都是加入一个点,这个操作有点像Floyd,Floyd算法也是每次操作加入一个点,然后更新.但直接每次加入新点就Floyd会超时,所以要对Floyd算法优化. 每次加入一个新点,就直接更新与该点有关的边.但有个误区是不能只更新已加入点与新点直接的边.比如1 阅读全文
posted @ 2021-05-03 20:18 acmloser 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 原题链接 考察:floyd 思路: 很明显的传递闭包,但是我们直接敲板子上去会TLE.神级剪枝在floyd的第三重循环,如果g[i][k] = 0那么第三重循环没必要进行. 1 #include <iostream> 2 #include <cstring> 3 using namespace st 阅读全文
posted @ 2021-05-03 17:37 acmloser 阅读(47) 评论(0) 推荐(0) 编辑
摘要: 原题链接 考察: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) 编辑