这题重边,dis初值,浮点类型都判断了,不知还有什么错了
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double ld;
const int N=55;
const int M=1e3+50;
const ll inf=0x3f;
ll n,m,q;
ll dis[N][N][M];
int main()
{
scanf("%lld%lld",&n,&m);
memset(dis,inf,sizeof(dis));
for(ll i=1;i<=m;++i){
ll u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
dis[u][v][1]=min(dis[u][v][1],w);
}
for(ll k=2;k<=m;++k){
for(ll w=1;w<=n;++w){
for(ll u=1;u<=n;++u){
for(ll v=1;v<=n;++v){
if(dis[u][v][k]>dis[u][w][k-1]+dis[w][v][1]){
dis[u][v][k]=dis[u][w][k-1]+dis[w][v][1];
}
}
}
}
}
scanf("%lld",&q);
for(ll i=1;i<=q;++i){
ll u,v;
scanf("%lld%lld",&u,&v);
ld ans=inf;
for(ll j=1;j<=n;++j){
if(dis[u][v][j]==inf) continue;
ld tmp=(ld)(dis[u][v][j])/(ld)(j);
ans=min(tmp,ans);
}
if(ans!=inf) printf("%.3Lf\n",ans);
else printf("OMG!\n");
}
return 0;
}