感觉非常假,错了 38 个点,求正解。
#include<bits/stdc++.h>
using namespace std;
#define N 200005
#define int long long
int n,m,i,j,ans,a,b,u,v,y,t,k;
int h[N],ru[N];
long double dis[N],L[N],R[N];
struct AB{
int a,b,u,v,n;
}d[N<<1];
std::queue<int>q;
void cun(int a,int b,int u,int v){
d[++k].a=a,d[k].b=b,d[k].u=u,d[k].v=v;
d[k].n=h[a],h[a]=k;
}
signed main(){
scanf("%lld%lld",&n,&m);
for(i=1;i<=m;i++){
scanf("%lld%lld%lld%lld",&a,&b,&u,&v);
cun(a,b,u,v),ru[b]++;
}
for(i=1;i<=n;i++) if(!ru[i]) q.push(i);
while(!q.empty()){
a=q.front(),q.pop();
for(i=h[a];i;i=d[i].n){
int b=d[i].b,u=d[i].u,v=d[i].v;
if((L[a]+u)/(R[a]+v)>=dis[b]){
L[b]=L[a]+u,R[b]=R[a]+v;
dis[b]=L[b]/R[b];
}
ru[b]--;
if(!ru[b]) q.push(b);
}
}
printf("%.15Lf\n",dis[n]);
return 0;
}