How F
  • 板块学术版
  • 楼主_lqs_
  • 当前回复18
  • 已保存回复18
  • 发布时间2023/10/14 21:41
  • 上次更新2023/11/2 13:46:57
查看原帖
How F
664744
_lqs_楼主2023/10/14 21:41

感觉非常假,错了 3838 个点,求正解。

#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;
}
2023/10/14 21:41
加载中...