记录
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,s;
int head[400005],nex[800005],cnt = 0;
double a[400005];
bool vis[400005];
struct edge{
int to;
double w;
}node[800005];
void add(int x,int y,double z) {
nex[++cnt] = head[x];
head[x] = cnt;
node[cnt].to = y;
node[cnt].w = z;
}
struct point{
int id;
double w;
friend bool operator <(point x,point y) {
return x.w > y.w;
}
};
priority_queue<point>p;
int A,B;
signed main() {
scanf("%lld %lld",&n,&m);
for(int i = 1;i <= n;i++) a[i] = 200000000.0;
for(int i = 1;i <= m;i++) {
int x,y;
double z;
scanf("%lld %lld %lf",&x,&y,&z);
z /= 100;
add(x,y,z),add(y,x,z);
}
scanf("%lld %lld",&A,&B);
a[A] = 100;
point b;
b.id = A,b.w = 100;
p.push(b);
while(!p.empty()) {
point now = p.top();
p.pop();
if(vis[now.id]) continue;
vis[now.id] = 1;
for(int i = head[now.id];i;i = nex[i]) {
if(a[node[i].to] > a[now.id] / (1.0 - node[i].w)) {
a[node[i].to] = a[now.id] / (1.0 - node[i].w);
point c;
c.id = node[i].to;
c.w = a[now.id] + node[i].w;
p.push(c);
}
}
}
printf("%.8lf",a[B]);
return 0;
}