20260817 - 最短路

零、题目链接

A 洛谷 P1608 路径统计
B AtCoder abc387_d Snaky Walk
C AtCoder abc325_e Our clients, please wait a moment
D CodeForces 229B Planets
E 洛谷 P1073 最优贸易
F 洛谷 P2865 Roadblocks G
G CodeForces 1725M Moving Both Hands
H CodeForces 173B Chamber of Secrets
I CodeForces 1915G Bicycles
J AtCoder abc289_e Swap Places
K CodeForces 1846G Rudolf and CodeVid-23

一、比赛基本情况

  • 比赛日期:2026 年 8 月 18 日
  • 比赛时长:3 小时
  • 比赛得分:5 分
  • 比赛排名:第 13 名

二、比赛整体回顾

这场比赛我按照 C, F, A, G, E 的顺序做题。

由于 E 写太久了,所以没有时间写下面的题目了。


三、题目复盘

A - 路径统计

一个简单的最短路计数题,注意读题两个不同的最短路方案要求:路径长度相同(均为最短路长度)且最短路经过的点的编号序列不同。还有 Dijkstra 一定要判断是否访问过,否则会卡到 \(O(nm)\)

B - Snaky Walk

一个简单的 BFS,记录三维 dis[x][y][f]\(f\) 代表是哪一种了。

C - Our clients, please wait a moment

建分层图,先分别考虑,然后从班车建有向图到火车。

D - Planets

在 Dijkstra 时记录一下时间就好了。

E - 最优贸易

思路就是枚举点,求返图到 \(x\) 的最大值减去正图到 \(x\) 的最小值。

为什么可以用 SPFA,\(O(nm)\) 最坏会爆的吧。

所以我们使用 Tarjan 缩点,把他变成一个 DAG,上面跑 DP,这样严格 \(O(n+m)\),常数很大。

F - Roadblocks G

次短路模版。

G - Moving Both Hands

转化一下题意,就是有两个人在图上走,找到一个点使得从 \(1\)\(i\) 加上 \(n\)\(i\) 的距离和最小。

可以用分层图。

H - Chamber of Secrets

转化一下题意,每次操作实际上是将行和列联通了,建图跑 BFS 就行了。

I - Bicycles

在 Dijkstra 的状态加一个当前速度就好了。

J - Swap Places

暴力 Dijkstra 就好了。

K - Rudolf and CodeVid-23

建一个图,点为 \(2^{10}\) 个,每次可以将结果连边。

posted @ 2026-08-18 09:15  AKCoder  阅读(20)  评论(0)    收藏  举报