#include <bits/stdc++.h> using namespace std; int head[200005] , tot; struct edge { int nxt , to; long double w; } a[200005];
inline void add_edge (int u , int v , int w) { a[++tot].to = v; a[tot].w = w; a[tot].nxt = head[u]; head[u] = tot; } priority_queue < pair <int , long double> > q; int n , m , c , b; long double dis[200005]; bool vis[200005]; inline void Dijkstra (int s) { for (int i = 1; i <= n; i++) dis[i] = 100000000; memset (vis , 0 , sizeof (vis)); dis[s] = 100; q.push (make_pair (s , 100)); while (q.size ()) { int u = q.top ().first; q.pop (); if (vis[u]) continue; vis[u] = true; for (int i = head[u]; i ; i = a[i].nxt) { int v = a[i].to; double w = a[i].w; if (dis[v] > dis[u] / (1 - (long double) (a[i].w / 100))) { dis[v] = dis[u] / (1 - (long double) (a[i].w / 100)); q.push (make_pair (v , -dis[v])); } } } }
signed main () { cin >> n >> m; for (register int i = 1; i <= m; i++) { int u , v; int w; cin >> u >> v >> w; add_edge (u , v , w); add_edge (v , u , w); } cin >> c >> b; Dijkstra (b); printf ("%.8Lf" , dis[c]); return 0; }```cpp