随笔分类 -  最短路

摘要:传送门 发现到 $K$ 不大,考虑有什么和 $K$ 有关的结论 发现答案似乎只会经过前 $K$ 小的边,如果边权第 $K$ 小的边有多条那么可以任意取 证明挺显然的吧,首先如果走了边权排名大于 $K$ 的边那么总的排名也一定大于 $K$,并且如果经过第 $K$ 名的边那么我们就只要考虑只走这一条边的 阅读全文
posted @ 2019-09-28 15:51 LLTYYC 阅读(132) 评论(0) 推荐(0)
摘要:传送门 就是个最短路....数据过于垃圾,随机边不用连都可以 $Ac$ 这里用的是线段树优化 $Dijkstra$ ,这样就不会一个节点反复进入堆里占空间了,速度显然更快 阅读全文
posted @ 2019-09-10 07:38 LLTYYC 阅读(144) 评论(0) 推荐(0)
摘要:传送门 统计每条边被最短路经过几次,点数不大,考虑计算以每个点为起点时对其他边的贡献 对于某个点 $S$ 为起点的贡献,首先跑一遍最短路,建出最短路的 $DAG$ 考虑 $DAG$ 上的某条边被以 $S$ 为起点的最短路经过的方案数,设此边为 $(u,v)$ ,那么方案数就是 $S$ 到 $u$ 的 阅读全文
posted @ 2019-09-08 13:52 LLTYYC 阅读(233) 评论(0) 推荐(0)
摘要:传送门 确定排名看一眼就想到 $floyd$ 传递闭包,然后因为 $n$ 比较大所以要 $bitset$ 优化 要求最少次数?然后就想到二分,然后就自闭了 结果网上做法都默认一个个比较就是最优解的吗?随便吧,题目应该是有错的... 阅读全文
posted @ 2019-08-27 11:46 LLTYYC 阅读(158) 评论(0) 推荐(0)
摘要:传送门 看题目一眼斜率优化,然后写半天调不出来 结果错误的 $dfs$ 有 $95$ 分?暴力 $SPFA$ 就 $AC$ 了? 讲讲正解: 显然是斜率优化的式子: 先不考虑 $q_{s_k}$ 的贡献,设 $f[i]$ 表示当前时间为 $i$ 的最小代价 如果不考虑位置关系,有 $f[p_i]=f 阅读全文
posted @ 2019-07-18 16:14 LLTYYC 阅读(281) 评论(0) 推荐(0)
摘要:传送门 注意数据中 k <= 50,考虑从这里入手解决问题 设 f [ i ] [ j ] 表示 已经到 i 点,最多还能比最短路程多走 j 的长度而不超过限制时的方案数 处理出终点到每个点的最短路程 dis [ i ] 那么对于一条边 (a,b,c), f [ a ] [ j ] --> f [ 阅读全文
posted @ 2018-11-04 17:35 LLTYYC 阅读(169) 评论(0) 推荐(1)
摘要:传送门 显然每次走到一个联通块肯定要把整个联通块的草场都走一遍,考虑缩点 然后直接建分层图跑最长路就好了 (为了方便,以下的强连通分量均称为点) 但是有一个小问题,如果反着走可能走到以前走过的点,怎么判断(因为每个点只有一次贡献) 其实根本不用判断,因为如果从一号点出发,走出去后要走回来一定要逆行一 阅读全文
posted @ 2018-11-03 10:56 LLTYYC 阅读(166) 评论(0) 推荐(0)
摘要:传送门 显然的分层图 设 dis [ i ] [ j ] 表示到点 i , 已经建立了 j 条高速公路的最短距离 然后转移每次都分建立高速公路和不建立高速公路两种情况 跑Djikstra 阅读全文
posted @ 2018-10-30 10:15 LLTYYC 阅读(154) 评论(0) 推荐(0)
摘要:传送门 直接爆力BFS有80分... 讲一下BFS吧 可以发现在一个局面下我们要知道的只有空格的位置和指定棋子的位置 因为其他的不是不可移动就是普通棋子 然后以空格的位置BFS,一个棋子走到空格其实就相当于空格走到棋子并把棋子挤到原本空格的位置 我们就BFS让空格瞎跑看看跑几步可以把指定棋子带到指定 阅读全文
posted @ 2018-10-29 12:09 LLTYYC 阅读(318) 评论(0) 推荐(0)
摘要:传送门 预处理 dis [ i ] [ j ] 表示从第 i 天到第 j 天不改变路线的最短路径 然后就可以愉快地推方程了 设 f [ i ] 表示从第一天到第 i 天的最少花费 那么 f [ j ] = min(f [ j ] , f [ i ] + dis[ i+1 ] [ j ] * (j-i 阅读全文
posted @ 2018-10-29 10:40 LLTYYC 阅读(122) 评论(0) 推荐(0)
摘要:传送门 设 f [ i ] [ j ] [ k ] 为表示从 i 到 j 是否有一条 $2^k$ 长度的路径 那么像 Floyd 一样枚举中转点,起点,终点转移就好了: if (f [ a ] [ b ] [ k-1 ] && f [ b ] [ c ] [ k-1 ] ) f [ a ] [ c 阅读全文
posted @ 2018-10-26 09:30 LLTYYC 阅读(156) 评论(0) 推荐(0)
摘要:传送门 经典题 如果把每个环都找一遍绝对时间爆炸 所以我们要换一种思路 看到求最大最小首先考虑二分答案 如果平均权值最小的回路小于我们二分的答案mid会发生什么呢 如果我们把回路的长度减少 mid*回路边数,回路的长度就会变成负数 而把回路减少 mid*边数 其实相当于把回路上的每条边都减少mid 阅读全文
posted @ 2018-10-24 11:57 LLTYYC 阅读(237) 评论(0) 推荐(0)
摘要:传送门 Folyd 本题需要对Folyd有较深的理解 考虑Folyd的思想 枚举每个中转点 用这些点去尝试更新其它所有两点的距离 如果有点不能走,显然它不能作为中转点 本题在不同的时间有不同的点能走 用Floyd可以枚举所有可以走的中转点,更新其它两点的距离 好像复杂度是 O(n^3 * q) 但是 阅读全文
posted @ 2018-09-28 10:19 LLTYYC 阅读(206) 评论(0) 推荐(0)
摘要:传送门 N和K都不大 可以跑分层图 设dis[ i ] [ j ] [ k ] 表示从起点到坐标为 i , j 的点,还剩下可以跑 k 步的油时的最少花费 然后用 Dijkstra 跑分层图 走下一步时就分开来讨论每种可能的操作 但是一定要注意每种操作的顺序 先走,然后考虑走到的这点要不要设加油站, 阅读全文
posted @ 2018-09-25 13:41 LLTYYC 阅读(355) 评论(0) 推荐(0)
摘要:传送门 肯定是最短路 而且题目有限制,不存在负环 所以可以跑堆优化的Dijkstra 但是因为有负边权,所以跑得很慢 这时可以利用题目的条件 每个联通块内是没有负边权的 所以可以优先处理单个块之内的最短路 这样一个块一个块地处理 可以跑得很快 可以用Tarjan处理每个点所在的联通块 代码: #in 阅读全文
posted @ 2018-09-25 13:15 LLTYYC 阅读(256) 评论(0) 推荐(0)
摘要:传送门 最短路 二分+SPFA 二分最小支出 如果边权<=最小支出,那么就相当于0 如果大于最小支出,值设为1 跑SPFA 如果dis[n] > k 说明到不了 否则说明可以到 模板套进去就好了,没什么好注释的... #include<iostream> #include<cstdio> #incl 阅读全文
posted @ 2018-09-23 11:00 LLTYYC 阅读(227) 评论(0) 推荐(0)
摘要:传送门 显然是网络流最小割 朴素的dinic会被卡 但是如果加上玄学优化就可以过了 主要是讲另一个方法 可以发现每条路径是不会交错的 对于样例的图,我们如果从右上随便走出发一条线到左下 把线经过的边全部割掉,就是一种可行的方案 所以可以把每个平面看成点,点之间的边就是平面之间的公共边 只要我们从右上 阅读全文
posted @ 2018-09-20 18:48 LLTYYC 阅读(151) 评论(0) 推荐(0)
摘要:传送门 算法Dijkstra要求次短路 那么在不考虑重复走一条边的情况下 肯定是把最短路中的一段改成另一段 至少要换另一条边到路径里所以可以枚举所有不属于最短路的每条边(a,b) 那么dis(1,a)+(a,b)+ dis(b,n)就是一种可能的答案(记为S) 显然如果另一条不属于S的边更新S后会使 阅读全文
posted @ 2018-09-09 21:39 LLTYYC 阅读(656) 评论(0) 推荐(2)
摘要:传送门 现在看看自己早期的题解真是惨不忍睹...(upd in 2019.8.11) 算法 最短路+DAG上的dp+建图 思路 首先是求最短路,但是题目没给出边的范围,所以我选用 $Dijkstra$ 求最短路,SPFA可能会爆炸 先分别求出以两个人为起点的单源最短路径,然后判断一条边 $(a,b) 阅读全文
posted @ 2018-08-20 16:35 LLTYYC 阅读(328) 评论(2) 推荐(0)