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

[CCC 2023 S4] 最低成本道路 题解

[CCC 2023 S4] 最低成本道路 题解

1.题目

\(n\)个点,\(m\)条边,每条边有长度 \(l\) ,权值 \(c\) ,组成一个原图

你需要构造一个新图,满足以下条件:

  • 仍然有\(n\)个点,且联通。

  • 新图上的边都是原图中的边

  • 对于任意一个点对 \((u,v)\),满足新图上从 \(u\)\(v\) 的路径长度(每条边的 \(l\) 之和)不大于原图上从 \(u\)\(v\) 的路径长度

定义这个新图的代价:所有边的 \(c\) 之和

你需要最小化这个代价

2.思路

考虑贪心

首先,题目中先要求了:

对于任意一个点对 \((u,v)\),满足新图上从 \(u\)\(v\) 的路径长度(每条边的 \(l\) 之和)不大于原图上从 \(u\)\(v\) 的路径长度

这是优先级最高的条件

在满足这个条件后,你需要:

让新图代价尽量小

这时候,我们就可以设计出贪心思路:

  • 首先,将所有边按 \(l\) 排序

  • 然后,当 \(l\) 相等时,按 \(c\) 排序。

  • 最后,在新图中加入边时,跑最短路,判断加入这条边会不会让某些路径的长度缩短,如果会,则加入这条边

为什么?

排序应该很好理解吧,因为优先级就是这样的

但是加入边时,为什么是这样呢?

如果加入这条边会让某些路径的长度缩短

则说明当前构造的这个新图不满足条件:

对于任意一个点对 \((u,v)\),满足新图上从 \(u\)\(v\) 的路径长度(每条边的 \(l\) 之和)不大于原图上从 \(u\)\(v\) 的路径长度

好吧,这挺显然的

但是这里还要注意一下:

当加入边 \((u,v)\) 时,

你不需要遍历所有点对,判断路径长度是否会变短

你只需要判断\(u\)\(v\) 的路径会不会变短

这也很好理解

如果加入的边不会让这条路径变短

那么其他的路径也不会经过这条边(它可以经过更优的另外一条路径

所以,总的下来,视 \(n,m\) 同阶,整个复杂度大概是 \(O(n^2\log{n})\)

能过

3.Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,s,dis[2010],vis[2010];
vector<pair<int,int> >e[200010];
void check(){memset(dis,0x3f,sizeof dis);memset(vis,0,sizeof vis);priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;dis[s]=0;q.push({dis[s],s});while(q.size()){int u=q.top().second;q.pop();if(vis[u])continue;vis[u]=1;for(auto [v,w]:e[u]){if(dis[u]+w<=dis[v]){dis[v]=dis[u]+w;q.push({dis[v],v});}}}
}//跑DJ
struct no{int u,v,l,w;
}g[200010];
main(){cin>>n>>m;for(int i=1;i<=m;i++){int u,v,l,w;cin>>u>>v>>l>>w;g[i]={u,v,l,w};}sort(1+g,1+g+m,[&](no x,no y){if(x.l==y.l)return x.w<y.w;return x.l<y.l;});int ans=0;for(int i=1;i<=m;i++){int u=g[i].u,v=g[i].v,l=g[i].l,w=g[i].w;s=u;check();if(dis[v]>l)e[u].push_back({v,l}),e[v].push_back({u,l}),ans+=w;//判断是否会让路径变短}cout<<ans;return 0;
}
http://www.jsqmd.com/news/366377/

相关文章:

  • 第10章 容器交互与调试
  • 7个核心技巧:AI绘画工具从入门到精通
  • 【计算机毕业设计案例】基于SpringBoot的社区便利店购物平台系统基于springboot的优购在线社区便利店系统小程序(程序+文档+讲解+定制)
  • Java AI开发实战:企业级应用的LLM集成框架解决方案
  • 同步机无感 STM32低成本MD500E永磁同步控制方案,pmsm,高性价比变频器参考方案 m...
  • 吐血推荐! AI论文写作软件 千笔ai写作 VS 云笔AI,研究生必备神器!
  • 零门槛玩转Goldberg Emulator:从新手到高手的蜕变指南
  • 企业级BI工具DataEase无网络环境离线部署开源方案:从困境到落地的全流程指南
  • Python量化交易系统:从零到实盘的策略开发指南
  • 20个高效能的Android模拟器优化技巧:从入门到精通的docker-android配置指南
  • vue3内置组件的功能介绍与用法
  • 2026年全国热解炉哪家专业?覆盖高海拔与规模化等多应用场景 聚焦差异化与落地可行性 - 深度智识库
  • 告别平台割裂:新一代游戏库管理工具的全域聚合方案
  • 创客匠人深度解析:知识产品化的系统架构与AI智能体协同机制
  • 7个步骤搭建本地化翻译服务:保障数据主权的LibreTranslate应用指南
  • 解决Discord音乐播放难题:JMusicBot从部署到精通的实战指南
  • 从精度到售后:2026年值得信赖的真密度仪生产厂家推荐清单 - 品牌推荐大师1
  • 大语言模型训练全流程技术指南:从环境适配到多模态融合
  • 电影推荐系统 | Python Django 协同过滤 Echarts 豆瓣电影数据 大数据 人工智能 毕业设计源码(建议收藏)✅
  • 从CRC冠军到标准制定者:他不信经验,只信G值 - RF_RACER
  • 小程序毕设项目推荐-基于微信小程序的在线社区优购便利店系统基于springboot的优购在线社区便利店系统小程序【附源码+文档,调试定制服务】
  • 小程序计算机毕设之基于springboot的体检预约小程序基于Spring Boot+Vue+UNIAPP的体检预约小程序(完整前后端代码+说明文档+LW,调试定制等)
  • 2026国内最新实木三层地板品牌TOP10推荐:优质企业权威榜单发布,健康环保适配多元家居需求 - 品牌推荐2026
  • 突破内存瓶颈:mimalloc如何解决资源受限系统的内存管理难题
  • OCR效率提升与文本识别优化:OCRmyPDF技术解析与实战指南
  • 小程序毕设选题推荐:基于springboot的体检预约小程序基于微信小程序的医院体检管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 激光粒度仪丹东百特为什么用户众多
  • 2026年全国生活垃圾焚烧炉哪家专业?覆盖多地区多垃圾类型适配需求 技术与服务双解析 - 深度智识库
  • 小程序毕设选题推荐:基于springboot的优购在线社区便利店系统小程序基于微信小程序的在线社区优购便利店系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 阿里云企业级邮箱申请攻略:2026年最新政策与开通步骤详解 - 品牌2025