当前位置: 首页 > news >正文

[SPFA] P9751 [CSP-J 2023] 旅游巴士 题解

概是我太蒻了吧,大部分题解我不是很懂。

就是一个改版的最短路。由于一单位时间走一个距离单位,所以距离和时间等价。设 \(dis_{i, j}\) 代表到了 \(i\) 点,距离模上 \(k\)\(j\) 的距离最小值。

先不管开放时间的限制。然后对于一个点,所有他可到达的点都可以如此更新。

\(nxt = (dis_{s, j} + 1) \mod k\)

\(dis_{to,nxt} = \min (dis_{s, j} + 1)\)

这个时候考虑限制的问题。

我们如果想走一条路,但是路的时间限制没到,那么我们就可以等下一班车,让时间凭空增加 \(k\),直到大于路的时间限制。

显然你每次增加 \(k\),在模 \(k\) 的意义下 \(j\) 是不会改变的,那 \(nxt\) 也不会改变。

所以,如果路径的限制即 \(lim_i\) 大于 \(dis_{s, j}\),我们就如此更新。

\(dis_{to, nxt} = \min (dis_{s, j} + \lceil\frac{lim_i - dis_{s, j}}{k}\rceil \times k)\)

这样就可以在不改变 \(j\)\(nxt\) 的情况下合法的更新。

然后就做完了。其他就是 SPFA 的板子。

我试了一下 BFS。有一组测试数据跑出了 59 秒好成绩。因此最好还是 SPFA 或 dijkstra。

#include <bits/stdc++.h>
#define rep(i, a, b) for(register int i = a; i <= b; ++i)
#define rep_(i, a, b) for(register int i = a; i >= b; --i)
using namespace std;
namespace Kx {constexpr int N = 1e4 + 5;int dis[N][105];int n, m, k, cnt, head[N];struct edge {int to, nxt, lim;} e[N << 1];inline void add(int u, int v, int l) {e[++cnt].to = v;e[cnt].nxt = head[u];e[cnt].lim = l;head[u] = cnt;}void bfs() {bool vis[N] = {};memset(dis, 0x3f, sizeof dis);dis[1][0] = 0;queue<int> q;q.push(1);vis[1] = true;while(!q.empty()) {int s = q.front();q.pop();vis[s] = false;for(register int i = head[s]; i; i = e[i].nxt) {rep(j, 0, k - 1) {int add = 0;if(dis[s][j] < e[i].lim) {add = (int)ceil((e[i].lim - dis[s][j]) * 1.0 / k) * k;}if(dis[s][j] + add + 1 < dis[e[i].to][(j + 1) % k]) {dis[e[i].to][(j + 1) % k] = dis[s][j] + add + 1;if(vis[e[i].to]) {continue;}q.push(e[i].to);vis[e[i].to] = true;}}}}}void main() {// freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);cin >> n >> m >> k;rep(i, 1, m) {int u, v, l; cin >> u >> v >> l;add(u, v, l);}bfs();if(dis[n][0] == 0x3f3f3f3f) {cout << -1 << '\n';}else {cout << dis[n][0];}}
}
int main() {Kx :: main();return 0;
}
http://www.hskmm.com/?act=detail&tid=40701

相关文章:

  • 2025.10.29
  • 2025年10月垃圾分类房品牌订制厂家深度评测与推荐:揭秘顶级厂家的优势与选购技巧
  • 解析 主语 + 谓语 + 宾语 句型
  • 动手动脑和实验性问题总结
  • Salesforce从业者,下一个10年,你该怎么走?
  • 2025第二届模式识别与图像分析国际学术会议(PRIA 2025)
  • 备战2025执业兽医资格证培训机构:执业兽医考试网课培训机构/执业兽医考试面授优质培训机构推荐榜出炉,助力考生高效通关
  • 2025年锅炉厂家/工厂排名前十:江苏永润锅炉领跑行业
  • 2025年闭式冷却塔生产厂家权威推荐榜单:不锈钢冷却塔/循环水冷却塔/工业冷却塔源头厂家精选
  • 45岁helloworld!
  • ogg升级部署
  • uniapp开发app打包ios上传AppStore提示SDK版本不兼容
  • 2025年挖泥船生产商权威推荐榜单:清淤船/挖沙船/绞吸船源头厂家精选
  • 99%的企业都不知道GEO搜索优化怎么做,讯灵AI来解答
  • 开了 8 年母婴店,靠微擎守住了 20000 会员的信任,再也不怕数据泄露
  • 建筑全场景安全监测 “无死角”!思通数科 AI 卫士多模态大模型覆盖文明施工、基坑与消防
  • Halcon算法——Hough变换
  • SSD和HDD存储应该如何选择?
  • Awesome GitHub Copilot:超级定制化AI编程助手工具集
  • 跟着视频学,从0开始学PostgreSQL数据库
  • 10.29
  • Halcon算法——分裂合并法
  • 2025 年锰钢编织筛网厂家最新推荐榜,技术实力与市场口碑深度解析,筛选优质靠谱供应商振动/滚筒/平筛/黑钢锰钢编织筛网公司推荐
  • P7353 [2020-2021 集训队作业] Tom Jerry 题解
  • 痞子衡嵌入式:在i.MXRTxxx下使能DMA链式传输可达到SPI从设备接收速率上限50Mbps
  • 2025薪酬管理系统推荐:6大主流系统全面对比与选型指南
  • Solon (可替换 SpringBoot)集成 Docker 实战:30分钟搞定轻量级应用容器化部署
  • 我使用FHQ写了线段树2
  • 2025年国产角接触球轴承厂家推荐 一文了解轴承厂家选择标准
  • VK36N5D 工作电压 2.2-5.5V 触摸芯片抗干扰5键触摸触控 5路触摸检测IC