1 条题解
-
0

// 最短路 Dijkstra 算法 O(mlogn) #include<bits/stdc++.h> using namespace std; const int N=2005; int n,m,s,t; vector<pair<double,int>> e[N]; int vis[N]; double d[N]; void dijkstra(){ priority_queue<pair<double,int>> q; //大根堆 q.emplace(d[s]=1,s); while(q.size()){ int u=q.top().second; q.pop(); if(vis[u]) continue; vis[u]=1; for(auto [w,v]:e[u]){ if(d[v]<d[u]*w) q.emplace(d[v]=d[u]*w,v); //d[v]从s到v的最大汇率 } } } int main(){ cin>>n>>m; for(int i=0,x,y,z; i<m; i++){ cin>>x>>y>>z; double p=(100.0-z)/100; //汇率 e[x].emplace_back(p,y); e[y].emplace_back(p,x); } cin>>s>>t; dijkstra(); //计算汇率的最长路 printf("%.8lf\n",100/d[t]); //汇率最大,费用最小 }
- 1
信息
- ID
- 2155
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 6
- 标签
- 递交数
- 44
- 已通过
- 16
- 上传者