20240624总结(最短路)

最短路复习专题,挺简单的

1|0A题 CF20C Dijkstra?

题意:给定一张无向图,询问从1到n的最短路径方案。

题解:就是dijstra板子,维护一下转移点即可,但是不要忘记是无向图。

2|0B题 HDU 2680 Choose the best route

题意:给定一张无向图,一些起点和一个终点。起点可以任意选取,询问到终点的最短路径长度。

题解:只建反边,从终点跑最短路到起点,选最短的一个即可

3|0C题 HDU 1181 变形课

题意:给定若干字符串,每个字符串的首字符和尾字符之间有连边,询问'b'与'm'之间是否有通路

题解:随便乱搞,数据范围很小,floyd求传递闭包就能过

4|0D题 HDU 1534 Schedule Problem

题意:有一些项目,每个项目有一定耗时,且项目之间存在一些开始、结束时间上的关系,询问每个项目的最早开始时间

题解:题目就是给了一些差分约束的条件。SPFA判负环,求最长路即可通过

5|0E题 CF1307D Cow and Fields

题意:给定一个无向图,边权均为1,一个点集。在点集中选取两个点连边,计算在所有选取方案中连边后点1到点n的最短路径长度的最大值

题解:先预处理出每个点到1号点的距离dis[]和到n号点的距离dist[]。设连接的两个点为s,t,新增可能的最短路径是dis[s]+dist[t]+1和dis[t]+dist[s]+1,题目要求可以转化为最大化min(dis[s]+dist[t]+1,dis[t]+dist[s]+1),对两者作差,前者减后者为(dis[s]-dist[s])-(dis[t]-dist[t]),两个括号里的值只与一个点有关,可以预处理f[i]=dis[i]-dist[i]。当f[t]>f[s]时,min(dis[s]+dist[t]+1,dis[t]+dist[s]+1)=dis[s]+dist[t]+1,反之同理。那么把所有集合里的点关于f从小到大排序,枚举s,与所有在其右侧的t贡献均为dis[s]+dist[t]+1。这时需要dist[t]最小,维护后缀最小值即可。

6|0F题 CF1422D Returning Home

题解:直接连边会炸,考虑减少数量,传送点的数量少,从这里下手。手玩发现只需按x排序连边,y排序连边就可以

7|0G题 CF543B Destroying Roads

题解:考虑题中两条路径最多相交一段连续的边,直接枚举这一段边的左右端点,判断取最小值即可

8|0H题 CF449B Jzzhu and Cities

在跑最短路时对每一个点记录能取得最小dis的所有连边。

对于一个点的连边,令a为连向非1节点的边的数量,b为连向1节点的数量

如果a不为0,这b条边可以全部删掉。若a为0,则可以删掉b-1条


__EOF__

本文作者星河倒注
本文链接https://www.cnblogs.com/wangwenhan/p/18265927.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   星河倒注  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示