WA #4 :(
#include<bits/stdc++.h>
using namespace std;
int n,m;
int u[20005],v[20005],x[20005],y[20005];
double dis[7005];
bool check(double t){
for(int i=0;i<=n;i++){
dis[i]=-1e100;
}
dis[1]=0;
int cnt=1;
while(true){
if(cnt>n){
return 1;
}
bool f=0;
for(int j=1;j<=m;j++){
if(dis[u[j]]+x[j]-t*y[j]-dis[v[j]]>1e-7){
dis[v[j]]=dis[u[j]]+x[j]-t*y[j];
f=1;
}
}
if(!f){
break;
}
cnt++;
}
return 0;
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d %d %d %d",&u[i],&v[i],&x[i],&y[i]);
}
int l=0,r=2000000,ans=-114514;
while(l<=r){
int t=(l+r)>>1;
if(check(t/10000.0)){
l=t+1;
ans=t;
}
else{
r=t-1;
}
}
if(ans==-114514){
printf("-1");
}
else{
printf("%.1f",ans/10000.0);
}
return 0;
}
bellman-ford 加分数规划,不知道是不是精度问题