【题解】[APIO2023] 赛博乐园 / cyberland

发布时间:2026/9/8 15:53:15

【题解】[APIO2023] 赛博乐园 / cyberland
P9370 [APIO2023] 赛博乐园 / cyberland - 洛谷 (luogu.com.cn)好题。follow the eternal Magnetic flow,decode the endless Enigma below.1.分层有特殊减少贡献的限制次数试试分层最短路。arr[i]0意思是这个国家可以让当前总通过时间为 0。这种点和起点没区别跑多源最短路就行。arr[i]2表示这个国家拥有让当前总通行时间除以 2 的能力。这种能力只能使用次注意到大多数数据可以从这里入手。遇到一个点贡献直接除以肯定是不满足正常最短路的正确性的相当于图中有负环。但发现多的能力使用次数的状态无法影响较少的能力使用次数的状态。也就是状态们在同一层时优先选走费用少的。不在同一层时优先走层数少的。好了现在解决的情况了。这个分数的占比非常大近乎是正解所以正解肯定差不多。注意到边数 * 边权。而这个数除以到精度以下。也就是最大就够用了。#include cyberland.h #includebits/stdc.h using namespace std; const int N 7e5 10; struct node { int x; double c; int k; }; vectornode G[N]; bool operator(node na, node nb) { if (na.k nb.k) return na.c nb.c; return na.k nb.k; } priority_queuenode Q; bool v[N], vis[80][N]; double dis[80][N]; void dfs(int x, int ed) { v[x] 1; for (node no : G[x]) { int y no.x; if (!v[y] y ! ed) { dfs(y, ed); } } } void init(int n, int K) { while (!Q.empty()) Q.pop(); for (int i 0; i n; i) { v[i] 0; G[i].clear(); } for (int i 0; i K; i) { for (int j 0; j n; j) { dis[i][j] 1e17; vis[i][j] 0; } } } double solve(int n, int m, int K, int ed, vectorint x, vectorint y, vectorint c, vectorint arr) { K min(K, 70); init(n, K); for (int i 0; i m; i) { G[x[i]].push_back({y[i], (double)c[i], 0}); G[y[i]].push_back({x[i], (double)c[i], 0}); } dfs(0, ed); // 多源初始化 for (int i 0; i n; i) { if (v[i] (arr[i] 0 || i 0)) { dis[0][i] 0; Q.push({i, 0.0, 0}); } } while (!Q.empty()) { node no Q.top(); Q.pop(); int u no.x, k no.k; if (vis[k][u] || u ed) continue; vis[k][u] 1; for (node e : G[u]) { int v e.x; double w e.c; if (dis[k][v] dis[k][u] w) { dis[k][v] dis[k][u] w; if (!vis[k][v]) { Q.push({v, dis[k][v], k}); } } if (arr[v] 2 k K) { if (dis[k 1][v] (dis[k][u] w) / 2.0) { dis[k 1][v] (dis[k][u] w) / 2.0; if (!vis[k 1][v]) { Q.push({v, dis[k 1][v], k 1}); } } } } } double ans DBL_MAX; for (int i 0; i K; i) { ans min(ans, dis[i][ed]); } if (ans 1e15) return -1; return ans; }2.倒推一个比较新颖的思路。最短路的本质是贡献必须不断递增不一定要严格递增。而这道题的倒着走就符合遇到 arr[i]2 的点就到下一层而第 k 层边的贡献就要除以。arr[i]0 就到 K 1 层全部边的费用都是 0。总的来说很有意思的一道多层最短路复合题做完感觉对这个算法的了解更深。#include cyberland.h #includebits/stdc.h using namespace std; const int N 7e5 10; struct node { int x; double c; int k; }; vectornode G[N]; // 反向思路用裸 Dijkstra只按距离排序 bool operator(node na, node nb) { return na.c nb.c; } priority_queuenode Q; bool vis[80][N]; double dis[80][N]; double num[80]; void init(int n, int K) { // 预计算边权倍数 num[0] 1.0; for (int i 1; i K; i) { num[i] num[i - 1] / 2; } num[K 1] 0; // 手动更改一下第 K 1 层的权重 while (!Q.empty()) Q.pop(); for (int i 0; i n; i) { G[i].clear(); } for (int i 0; i K 1; i) { for (int j 0; j n; j) { dis[i][j] 1e17; vis[i][j] 0; } } } double solve(int n, int m, int K, int ed, vectorint x, vectorint y, vectorint c, vectorint arr) { K min(K, 70); init(n, K); for (int i 0; i m; i) { G[x[i]].push_back({y[i], (double)c[i], 0}); G[y[i]].push_back({x[i], (double)c[i], 0}); } // 从 ed 出发目标到 0 dis[0][ed] 0; Q.push({ed, 0.0, 0}); while (!Q.empty()) { node no Q.top(); Q.pop(); int u no.x, k no.k; if (vis[k][u]) continue; vis[k][u] 1; for (node e : G[u]) { int v e.x; if (v ed) continue; // 不能走回来 double w e.c; if (arr[v] 0) { if (dis[K 1][v] dis[k][u] w * num[k]) { dis[K 1][v] dis[k][u] w * num[k]; if (!vis[K 1][v]) { Q.push({v, dis[K 1][v], K 1}); } } continue; // 清零后不再尝试其他转移 } if (dis[k][v] dis[k][u] w * num[k]) { dis[k][v] dis[k][u] w * num[k]; if (!vis[k][v]) { Q.push({v, dis[k][v], k}); } } if (arr[v] 2 k K) { if (dis[k 1][v] dis[k][u] w * num[k]) { dis[k 1][v] dis[k][u] w * num[k]; if (!vis[k 1][v]) { Q.push({v, dis[k 1][v], k 1}); } } } } } // 答案取所有层到达 0 的最小值 double ans DBL_MAX; for (int i 0; i K 1; i) { ans min(ans, dis[i][0]); } if (ans 1e15) return -1; return ans; }

相关新闻

从芯片级精度到MW级动力:汽车电子全栈测试方案深度解析

从芯片级精度到MW级动力:汽车电子全栈测试方案深度解析

2026/9/8 15:53:15

展会第二天下午,我在ITECH展台旁边站了差不多四十分钟,观察了一个很有意思的现象:不少来参观的工程师,一开始是被那台大功率回馈负载吸引过去的,但最后留在展台前问得最久的,反而是旁边那几台不起眼的精密源…

res-downloader:5分钟把在线视频音乐存成本地文件的完整教程

res-downloader:5分钟把在线视频音乐存成本地文件的完整教程

2026/9/8 15:53:15

res-downloader:5分钟把在线视频音乐存成本地文件的完整教程 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader res-…

3 步自查搞定 res-downloader 下载失败:文件完整性校验排查指南

3 步自查搞定 res-downloader 下载失败:文件完整性校验排查指南

2026/9/8 15:53:15

3 步自查搞定 res-downloader 下载失败:文件完整性校验排查指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader r…

汽车电气功能测试分层架构:从部件到整车的系统化验证方法

汽车电气功能测试分层架构:从部件到整车的系统化验证方法

2026/9/8 17:03:18

做过汽车电气测试的人应该都有过这种经历:试制阶段的样车上冒出一个电气问题,比如刹车灯不亮,大家第一反应是“灯坏了”,然后换灯,没解决;接着怀疑开关,测了半天开关正常;再怀疑线束…

从单条请求到团队工作流:一篇带你跑通 Yaak 桌面 API 客户端

从单条请求到团队工作流:一篇带你跑通 Yaak 桌面 API 客户端

2026/9/8 17:03:18

从单条请求到团队工作流:一篇带你跑通 Yaak 桌面 API 客户端 【免费下载链接】yaak The most intuitive desktop API client. Organize and execute REST, GraphQL, WebSockets, Server Sent Events, and gRPC 🦬 项目地址: https://gitcode.com/GitHu…

GitHub Skills 全解析:官方交互式课程带你玩转协作开发

GitHub Skills 全解析:官方交互式课程带你玩转协作开发

2026/9/8 17:03:18

如果你在 GitHub 上逛过一阵子,大概率见过这个叫 skills 的仓库——它其实是 GitHub 官方搞的交互式学习项目,专门用来教新手和进阶用户怎么用好 GitHub 本身。我最初以为它不过是几个入门 demo,直到自己把里面的课程刷完一遍,才…

tiktoken 快速上手指南:OpenAI 模型的 BPE 分词器全解

tiktoken 快速上手指南:OpenAI 模型的 BPE 分词器全解

2026/9/8 17:03:18

tiktoken 快速上手指南:OpenAI 模型的 BPE 分词器全解 【免费下载链接】tiktoken tiktoken is a fast BPE tokeniser for use with OpenAIs models. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiktoken tiktoken 是 OpenAI 为其模型系列开发的高性能…

Cobra 文档生成实战:用 spf13/cobra/doc 包为命令树自动生成 ReST 文档

Cobra 文档生成实战:用 spf13/cobra/doc 包为命令树自动生成 ReST 文档

2026/9/8 17:03:18

Cobra 文档生成实战:用 spf13/cobra/doc 包为命令树自动生成 ReST 文档 【免费下载链接】cobra A Commander for modern Go CLI interactions 项目地址: https://gitcode.com/GitHub_Trending/co/cobra 本文以 Cobra 仓库的 ReST 文档生成指南 为核心&#x…

Ultralytics SAM 模型接口全解析:统一 Segment Anything(SAM / SAM2 / SAM3)家族的 Python API 参考

Ultralytics SAM 模型接口全解析:统一 Segment Anything(SAM / SAM2 / SAM3)家族的 Python API 参考

2026/9/8 16:53:17

Ultralytics SAM 模型接口全解析:统一 Segment Anything(SAM / SAM2 / SAM3)家族的 Python API 参考 【免费下载链接】ultralytics Ultralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation,…

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/7 20:21:46

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/8 4:55:53

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/7 8:03:37

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

芯片良率波动可视化:动画拆解工艺因果,重建客户信任

芯片良率波动可视化:动画拆解工艺因果,重建客户信任

2026/9/8 0:02:30

芯片这个行业有个不太被人摆到台面上、但几乎每天都在发生的场景:客户拿着一条良率曲线截图问你,这批货的良率怎么掉了三个点,是不是工艺出问题了,产生的不良会不会流到他们产线上去。你解释了半天,客户似懂非懂&#…

PyTorch DataLoader参数冲突:sampler与shuffle互斥的根源与正确写法

PyTorch DataLoader参数冲突:sampler与shuffle互斥的根源与正确写法

2026/9/8 0:02:30

ValueError: sampler option is mutually exclusive with shuffle,这个报错我在 PyTorch 的 DataLoader 上至少见过几十次了,而且很有意思的是,它经常不是新手专属——很多写了好几年模型的老手,在从单机改成自定义采样器&#xf…

中国车企再破谣言,GAC吉利零跑获欧盟安全五星

中国车企再破谣言,GAC吉利零跑获欧盟安全五星

2026/9/8 0:02:30

有人可能在网上开着皮卡拍视频,声称中国电动车不仅性能不如美国大排量车型,安全性也堪忧。然而事实恰恰相反,GAC、吉利和零跑最新推出的电动车型在极为严苛的欧盟新车安全评鉴(Euro NCAP)测试中全部斩获满分。就在特斯…

远程协作的工作台整理

远程协作的工作台整理

2026/9/8 4:23:39

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/8 3:19:39

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/8 4:00:23

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…