据rqy说有这么一个结论$$ans=min_{v in V,F_n(v) eq infty} max_{0 leq k leq n - 1} left[frac{F_n(v)-F_k(v)}{n-k} ight]qquad$$
其中新建一个节点(S)向所有点连边,(F_i(v))表示从(S)开始经过恰好(i)条边到达(v)的最短路
代码里(F)的下标都减了(1)
//minamoto
#include<bits/stdc++.h>
#define rint register int
#define inf 1e12
using namespace std;
const int N=3005,M=10005;
double F[N][N],w[M];int u[M],v[M],n,m;
int main(){
// freopen("testdata.in","r",stdin);
scanf("%d%d",&n,&m);
for(rint i=1;i<=m;++i)scanf("%d%d%lf",&u[i],&v[i],&w[i]);
for(rint i=0;i<=n;++i)for(rint j=1;j<=n;++j)F[i][j]=i?inf:0;
for(rint i=0;i<n;++i)for(rint j=1;j<=m;++j)
F[i+1][v[j]]=min(F[i+1][v[j]],F[i][u[j]]+w[j]);
double ans=inf,ans1;
for(rint i=1;i<=n;++i)if(F[n][i]<1e11){
ans1=-inf;
for(rint j=0;j<n;++j)ans1=max(ans1,(F[n][i]-F[j][i])/(n-j));
ans=min(ans,ans1);
}
printf("%.8lf
",ans);return 0;
}