RT,不知道为什么dp不能通过
#include<bits/stdc++.h>
using namespace std;
struct frac{int a,b;};
struct node{int v,b,c;};
frac f[200100];
vector<node> a[200100];
frac simp(frac x)
{
int g=__gcd(x.a,x.b);
x.a/=g;
x.b/=g;
return x;
}
bool comp(frac a,frac b)
{
if (b.a==0&&b.b==0) return 1;
a=simp(a);
b=simp(b);
int l=a.b*b.b/__gcd(a.b,b.b);
int x=a.a*(l/a.b),y=b.a*(l/b.b);
if (x>y) return 1;
return 0;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m;
cin>>n>>m;
for (int i=1;i<=m;i++)
{
int u,v,b,c;
cin>>u>>v>>b>>c;
a[u].push_back({v,b,c});
}
for (int i=2;i<=n;i++)
f[i]={-1,-1};
for (int i=1;i<=n;i++)
{
if (f[i].a==-1&&f[i].b==-1) continue;
for (auto j:a[i])
{
int v=j.v,b=j.b,c=j.c;
frac tmp={f[i].a+b,f[i].b+c};
if (f[v].a==-1&&f[v].b==-1) f[v]=tmp;
if (comp(tmp,f[v])) f[v]=tmp;
}
}
f[n]=simp(f[n]);
cout<<fixed<<setprecision(10)<<(f[n].a*1.0)/(f[n].b*1.0);
return 0;
}