样例已过
查看原帖
样例已过
750803
_Revenge_楼主2022/7/31 09:51

这题重边,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;
}
2022/7/31 09:51
加载中...