社区讨论
爆零求救
P1576最小花费参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @loc3tpt7
- 此快照首次捕获于
- 2023/10/30 07:30 2 年前
- 此快照最后确认于
- 2023/11/04 13:33 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
struct node{
int v,w;
node(){}
node(int vv,int ww){
v=vv;
w=ww;
}
};
vector<node>g[110000];
int n,m,s,d[110000],t;
set<pair<int,int> >min_heap;
int main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
cin>>n>>m;
for(int i=0;i<m;i++){
int u,v,w;
cin>>u>>v>>w;
g[u].push_back(node(v,w));
g[v].push_back(node(u,w));
}
memset(d,0x3f,sizeof d);
cin>>s>>t;
d[s]=0;
min_heap.insert(make_pair(0,s));
while(min_heap.size()){
int mind=min_heap.begin()->first,v=min_heap.begin()->second;
min_heap.erase(min_heap.begin());
for(int i=0;i<g[v].size();i++){
if(d[g[v][i].v]>d[v]+g[v][i].w){
min_heap.erase(make_pair(d[g[v][i].v],g[v][i].v));
d[g[v][i].v]=d[v]+g[v][i].w;
min_heap.insert(make_pair(d[g[v][i].v],g[v][i].v));
}
}
}
double sum=1.0+d[t]/100*1.0,ans;
ans=100.0*sum;
printf("%.8f\n",ans);
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...