就离谱。样例2输出 10000005.00000000
#include<bits/stdc++.h>
#define fi first
#define se second
#define eps 1e-12
using namespace std;
int n,m,dis2[100001],u,v,w;
double dis[100001];
string s[100001];
vector<pair<int,int> >G[100001];
queue<int>q;
bool spfa(double s){
while(q.size()) q.pop();
memset(dis,0x3f,sizeof dis);
memset(dis2,0,sizeof dis2);
for(int i=1;i<=n;i++) q.push(i);
dis[1]=0;
while(q.size()){
int u=q.front();
q.pop();
for(int i=0;i<G[u].size();i++){
if(dis[G[u][i].se]>dis[u]+G[u][i].fi-s){
dis[G[u][i].se]=dis[u]+G[u][i].fi-s;
dis2[G[u][i].se]=dis2[u]+1;
if(dis2[G[u][i].se]>n) return 1;
q.push(G[u][i].se);
}
}
}
return 0;
}
int main(){
while(cin>>n&&n){
for(int i=1;i<=n;i++) G[i].clear();
cin>>m;
for(int i=1;i<=m;i++){
cin>>u>>v>>w;
G[u].push_back({w,v});
}
double l=-1e7-5,r=1e7+5;
while(r-l>eps){
double mid=(l+r)/2.0;
if(spfa(mid)) r=mid;
else l=mid;
}
printf("%.8f\n",l);
}
}