P1768 WA 30pts求调
  • 板块灌水区
  • 楼主jfls211320zhr
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/21 09:14
  • 上次更新2024/10/21 13:37:10
查看原帖
P1768 WA 30pts求调
1082999
jfls211320zhr楼主2024/10/21 09:14

rt

#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,z,w;
int head[7004],e[40005],nxt[40005],w1[40005],w2[40005],idx;//w1有趣程度,w2票价
double totans=-0.1;
void add(int u,int v,int s1,int s2){
	e[idx]=v;
	w1[idx]=s1;
	w2[idx]=s2;
	nxt[idx]=head[u];
	head[u]=idx;
	idx++;
	return;
}
bool vis[114514];
int sm1[7004];
int sm2[7004];
queue<int>q;
double spfa(int st){
	double r=-0.1;
	q.push(st);
	vis[st]=1;
	int tmp;
	while(q.size()){
		tmp=q.front();
		q.pop();
		for(int i=head[tmp];i!=-1;i=nxt[i]){
			if(e[i]==st){
				r=max(r,(double)(sm1[tmp]+w1[i])/(double)(sm2[tmp]+w2[i]));
				continue;
			}
			if(vis[e[i]])continue;
			q.push(e[i]);
			vis[e[i]]=1;
			if(sm1[e[i]]*(sm2[tmp]+w2[i])<(sm1[tmp]+w1[i])*sm2[e[i]]){
				sm1[e[i]]=sm1[tmp]+w1[i];
				sm2[e[i]]=sm2[tmp]+w2[i];
			}
		}
	}
	return r;
}
int main(){
	memset(head,-1,sizeof(head));
	scanf("%d %d",&n,&m);
	for(int i=1;i<=m;i++){
		scanf("%d %d %d %d",&x,&y,&z,&w);
		add(x,y,z,w);
	}
	for(int i=1;i<=n;i++)totans=max(totans,spfa(i));
	if(totans!=-0.1)printf("%.1lf",totans);
	else printf("-1");
	return 0;
}
2024/10/21 09:14
加载中...