20240624总结(最短路)

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

A题 CF20C Dijkstra?

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

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

B题 HDU 2680 Choose the best route

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

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

C题 HDU 1181 变形课

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

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

D题 HDU 1534 Schedule Problem

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

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

E题 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]最小,维护后缀最小值即可。

F题 CF1422D Returning Home

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

G题 CF543B Destroying Roads

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

H题 CF449B Jzzhu and Cities

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

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

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

posted @   星河倒注  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示