abc324f 求调
  • 板块学术版
  • 楼主CoderCharlie
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/10/14 22:48
  • 上次更新2023/11/2 13:46:06
查看原帖
abc324f 求调
507652
CoderCharlie楼主2023/10/14 22:48

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;
}
2023/10/14 22:48
加载中...