![]()
1 #include<bits/stdc++.h>
2 using namespace std;
3 typedef pair<int,double>pii;
4 const int N=2005;
5 const double inf=1e-5;
6 int n,m,st,ed;
7 double dis[N];
8 vector<pii>G[N];
9 struct cmp
10 {
11 bool operator ()(pii &a,pii &b)
12 {
13 return a.second<b.second;
14 }
15 };
16 void dijkstra()
17 {
18 dis[st]=1;
19 priority_queue<pii,vector<pii>,cmp>q;
20 q.push({st,dis[st]});
21 while(q.size())
22 {
23 auto p=q.top();
24 q.pop();
25 int u=p.first;
26 double d=p.second;
27 if(u==ed)break;
28 for(auto &vv:G[u])
29 {
30 int v=vv.first;
31 double w=vv.second;
32 if(double(d*(1-w))>dis[v])
33 {
34 dis[v]=double(d*(1-w));
35 q.push({v,dis[v]});
36 }
37 }
38 }
39
40 }
41 int main()
42 {
43
44 scanf("%d%d",&n,&m);
45 for(int i=1;i<=n;i++)dis[i]=inf;
46 for(int i=1;i<=m;i++)
47 {
48 int u,v,w;
49 scanf("%d%d%d",&u,&v,&w);
50 G[u].push_back({v,double(w)/100});
51 G[v].push_back({u,double(w)/100});
52 }
53 scanf("%d%d",&st,&ed);
54 dijkstra();//这里用的最大路径去模拟,初始值dis【i】全部初始化很小;
55 double ans=100/dis[ed];
56 printf("%.8lf",ans);//模拟过程,最后是dis[ed]*x=100,所以x=100/dis[ed]
57 return 0;
58 }