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

M. Moving Both Hands(反向图+Dijkstra)

Problem - 1725M - Codeforces

题目大意:给你一个有向图,起始点在1,问起始点分别与另外n-1个 点相遇的最短时间,无法相遇输出-1。

思路:反向建图,第一层建原图,第二层建反向图,两层中对应点之间连接一条权值为0的边,最终答案为第一层的1号点到第二层i号点的最短路。

原理:由于两点均可移动,所以一定存在点p,使得s->p,p<-t,此时在第二层中建反向图p<-t转换成p->t,相当于直接从起点s跑单源最短路,而两层间对应点间全值为0的边,表示当前点为相遇点。

Code:

vector<PII> e[500010];void solve()
{int n,m;cin>>n>>m;while(m--){int a,b,c;cin>>a>>b>>c;e[a].push_back({b,c});e[n+b].push_back({n+a,c});}for(int i=1;i<=n;i++) e[i].push_back({i+n,0});vector<int> dist(n*2+5,1e18);dist[1]=0;vector<bool> st(n*2+5,false);priority_queue<PII,vector<PII>,greater<PII>> heap;heap.push({0,1});while(heap.size()){auto [d,u]=heap.top();heap.pop();if(st[u]) continue;st[u]=true;for(auto [v,w]:e[u]){if(dist[v]>d+w){dist[v]=d+w;heap.push({dist[v],v});}}}for(int i=2;i<=n;i++){if(dist[i+n]==1e18) cout<<-1<<' ';else cout<<dist[i+n]<<' ';}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int t;//cin>>t;t=1;while(t--) solve();
}

http://www.dtcms.com/a/184200.html

相关文章:

  • 蓝桥杯14届国赛 合并数列
  • Spyglass:在batch/shell模式下运行目标的顶层是什么?
  • 【project】--数据挖掘
  • Docker 部署 - Crawl4AI 文档 (v0.5.x)
  • 【TI MSPM0】CCS工程管理
  • 【LwIP源码学习6】UDP部分源码分析
  • 研修室智慧化升级实践:线上预约+智能门锁的融合方案
  • 高级数据结构:线段树
  • Problem B: 面向对象综合题2
  • LLM框架
  • 【Diffusion】在华为云ModelArts上运行MindSpore扩散模型教程
  • 基于SpringBoot的抽奖系统测试报告
  • 11、参数化三维产品设计组件 - /设计与仿真组件/parametric-3d-product-design
  • Linux-TCP套接字编程简易实践:实现EchoServer与远程命令执行及自定义协议(反)序列化
  • 基于物联网的智能家居监控系统设计和实现(源码+论文+部署讲解等)
  • OpenWrt开发第8篇:树莓派开发板做无线接入点
  • 计算机网络笔记(二十一)——4.3IP层转发分组的过程
  • 小土堆pytorch--torchvision中的数据集的使用dataloader的使用
  • 在python中,为什么要引入事件循环这个概念?
  • 第二十三节:图像金字塔- 图像金字塔应用 (图像融合)
  • 封装和分用(网络原理)
  • 【常用算法:排序篇】4.高效堆排序:线性建堆法与蚂蚁问题的降维打击
  • Kafka的基本概念和Dokcer中部署Kafka
  • B 端电商数据接口开发:1688 商品详情页实时数据抓取技术解析
  • 组合模式(Composite Pattern)详解
  • Docker拉取ubuntu22.04镜像使用ROS2 humble及仿真工具可视化进行导航
  • [案例四] 智能填写属性工具(支持装配组件还有建模实体属性的批量创建、编辑)
  • NoSQL数据库技术与应用复习总结【看到最后】
  • MySQL为什么选择B+树
  • MCP:重塑AI交互的通用协议,成为智能应用的基础设施