提交时间:2024-07-20 09:48:41

运行 ID: 157492

#include<bits/stdc++.h> using namespace std; double a[1001][1001],dis[1001]={0},maxn; int n,m,i,j,k,x,y,f[1001]={0}; void init() { scanf("%d %d",&n,&m); for(i=1;i<=m;i++) { scanf("%d %d",&j,&k); scanf("%lf",&a[j][k]); a[k][j]=a[j][k]=(100-a[j][k])/100; } scanf("%d %d",&x,&y); } void dij(int x) { for(i=1;i<=n;i++)dis[i]=a[x][i]; dis[x]=1; f[x]=1; for(i=1;i<=n-1;i++) { maxn=0; for(j=1;j<=n;j++) { if(f[j]==0&&dis[j]>maxn) { k=j; maxn=dis[j]; } } f[k]=1; if(k==y)break; for(j=1;j<=n;j++) { if(f[j]==0&&dis[k]*a[k][j]>dis[j])dis[j]=dis[k]*a[k][j]; } } } int main() { init(); dij(x); printf("%0.8lf",100/dis[y]); return 0; }