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

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.xdnf.cn/news/5376.html

相关文章:

  • 视频编解码学习10之成像技术原理
  • 华为配置篇-RSTP/MSTP实验
  • 股指期货的保证金交易和资金门槛是多少?
  • 《Go小技巧易错点100例》第三十三篇
  • Redis--常见数据类型List列表
  • 思维链框架:LLMChain,OpenAI,PromptTemplate
  • 游戏引擎学习第274天:基于弹簧的动态动画
  • 【MySQL】表空间结构 - 从何为表空间到段页详解
  • 【质量管理】什么是过程?
  • Qt 窗口部件(2)输入部件详解
  • 深入解析STM32中断机制:从原理到外部中断实战
  • 力扣70题解
  • 二叉搜索树讲解
  • [思维模式-25]:《本质思考力》-6- 马克思主义哲学的五对基本哲学范畴,以及在计算机领域的体现
  • 用c语言实现——一个交互式的中序线索二叉树系统,支持用户动态构建、线索化、遍历和查询功能
  • 理性地倾听与表达:检索算法的语言学改进
  • 《P1226 【模板】快速幂》
  • 开疆智能Profinet转canopen网关连接易福门(IFM)传感器配置案例
  • QB/T 1649-2024 聚苯乙烯泡沫塑料包装材料检测
  • 大模型MCP更高效的通信:StreamableHTTP协议
  • 欧拉计划 Project Euler 69(欧拉总计函数与最大值)题解
  • 炫酷粒子系统动画实战:Matplotlib实现银河漩涡效果
  • SierraNet M1288网络损伤功能显著助力GPU互联网络的测试验证,包含包喷洒,LLR等复杂特性的验证测试
  • GMS 与非 GMS:有何区别?
  • Java基础:代理
  • KNOWLEDGE-BASED SYSTEMS(KBS期刊)投稿经验分享
  • # 深度学习实操 附录B 深入解析 tensorflow 自动微分
  • 纯惯性导航、非线性最小二乘法纯uwb测距导航定位、惯性uwb松组合导航、惯性uwb紧组合导航,四种方法对比
  • 圆角边框 盒子阴影 文字阴影
  • Linux进程间通信(四)之补充【日志】