当前位置: 首页 > 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();
}

相关文章:

  • 蓝桥杯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中,为什么要引入事件循环这个概念?
  • 第二十三节:图像金字塔- 图像金字塔应用 (图像融合)
  • 中保协发布《保险机构适老服务规范》,全面规范保险机构面向老年人提供服务的统一标准
  • 福建厦门市副市长、市公安局局长陈育煌出任吉林省公安厅厅长
  • 在笔墨金石间,看胡问遂与梅舒适的艺术对话
  • 受贿3501万余元,中石油原董事长王宜林一审被判13年
  • 交涉之政、交涉之学与交涉文献——《近代中外交涉史料丛书》第二辑“总序”
  • 习近平会见缅甸领导人敏昂莱