dij+堆优化,样例汇率得0,求捞
#include<bits/stdc++.h>
#define N 200005
#define M make_pair
#define PII pair<double,int>
using namespace std;
int m,n,cnt,s,e;
int head[N];
double ans[N];
bool vis[N];
struct node{
double dis;
int to;
int next;
}E[N];
priority_queue<PII> q;
inline void add(int u,int v,double d)
{
E[++cnt].dis=1.0-(double)(d/100.0);
E[cnt].to=v;
E[cnt].next=head[u];
head[u]=cnt;
}
inline void dijkstra()
{
while(!q.empty())
{
int x=q.top().second;
q.pop();
if(vis[x]) continue;
vis[x]=1;
for(int i=head[x];i;i=E[i].next)
{
int v=E[i].to,w=E[i].dis;
if(ans[v]<ans[x]*w)
{
ans[v]=ans[x]*w;
q.push(M(ans[v],v));
}
}
}
}
int main()
{
std::ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v;
double d;
cin>>u>>v>>d;
add(u,v,d);
add(v,u,d);
}
cin>>s>>e;
memset(ans,-0x3fff,sizeof(ans));
q.push(M(1.0,s));
ans[s]=1.0;
dijkstra();
printf("%.8f",100/ans[e]);
return 0;
}