装最小值minn double定成了int(乐
# include <bits/stdc++.h>
using namespace std;
double dis[5000]={0};
double a[5000][5000];
int f[5000]={0};
int k,minn;
int n,m;
int A,B;
void init()
{
int x,y,z;
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
scanf("%lf",&a[x][y]);
a[x][y]=(100-a[x][y])/100;
a[y][x]=a[x][y];//建双向边
}
scanf("%d%d",&A,&B);//以上为读入数据
}
void dijkstra(int A)
{
for(int i=1;i<=n;i++)
dis[i]=a[A][i];//把人数存进dis数组中
dis[A]=1;
f[A]=1;//把f数组中x的位置标记为1
for(int i=1;i<=n-1;i++)
{
minn=0;
for(int j=1;j<=n;j++)
if(f[j]==0 && dis[j]>minn)//f数组中j的位置还没有被标记且dis数组中j大于minn的值
{
k=j;//就把j的值给k
minn=dis[j];//更新minn的值
}
f[k]=1;//标记
if(k==B)//如果k==y,就直接break掉,下面的程序就没有做的必要来了
break;
for(int 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();
dijkstra(A);
printf("%0.8lf",100/dis[B]);
return 0;
}