gym101124 L. Subway(最短路,dijkstra板子)
2021/10/23 6:09:28
本文主要是介绍gym101124 L. Subway(最短路,dijkstra板子),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
https://codeforces.com/gym/101124
题意:
最短路
思路:
建完图,上dijkstra板子即可
#include <bits/stdc++.h> using namespace std; #define x first #define y second const int N = 210; double g[N][N]; //存储每条边 double dist[N]; bool st[N]; double dijkstra(int n) { //求1号点到n号点的最短路,如果不存在则返回-1 fill(dist, dist+n+5, 1e9); dist[1] = 0; for(int i = 0; i < n - 1; i++) { int t = -1; for(int j = 1; j <= n; j++) if(!st[j] && (t == -1 || dist[t] > dist[j])) t = j; for(int j = 1; j <= n; j++) dist[j] = min(dist[j], dist[t] + g[t][j]); st[t] = true; } if(dist[n] == 0x3f3f3f3f) return -1; return dist[n]; } pair<double, double> p[N]; int n; double wwalk(pair<double, double> t1, pair<double, double> t2) {return sqrt((t1.x-t2.x)*(t1.x-t2.x)+(t1.y-t2.y)*(t1.y-t2.y))/(10/3.6); } double wsubway(pair<double, double> t1, pair<double, double> t2) {return sqrt((t1.x-t2.x)*(t1.x-t2.x)+(t1.y-t2.y)*(t1.y-t2.y))/(40/3.6); } signed main() { int xx, yy, xf, yf; cin >> xx >> yy >> xf >> yf; p[++n] = {xx, yy}; bool flag = 0; while(cin >> xx >> yy) { if(xx == -1 && yy == -1) {flag = 0; continue; } p[++n] = {xx, yy}; for(int i = 1; i < n; i++) g[i][n] = g[n][i] = wwalk(p[i], p[n]); if(flag) g[n-1][n] = g[n][n-1] = wsubway(p[n-1], p[n]); flag = 1; } p[++n] = {xf, yf}; for(int i = 1; i < n; i++) g[i][n] = g[n][i] = wwalk(p[i], p[n]); cout << fixed << setprecision(0) << dijkstra(n)/60; return 0; }
这篇关于gym101124 L. Subway(最短路,dijkstra板子)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-12百万架构师第十五课:源码分析:Spring 源码分析:SpringMVC核心原理及源码分析|JavaGuide
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide