Why CE???
  • 板块学术版
  • 楼主robertuu
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/10/14 21:54
  • 上次更新2023/11/2 13:46:43
查看原帖
Why CE???
477597
robertuu楼主2023/10/14 21:54
#include<bits/stdc++.h>
using namespace std;
const int N = 200001;
int n,m;
double dis[N];
bool vis[N];
int cnt,head[N],nxt[N],to[N],f[N],d[N];
void add(int x,int y,int z,int w)
{
	to[++cnt] = y;
	nxt[cnt] = head[x];
	f[cnt] = z;
	d[cnt] = w;
	head[x] = cnt;
}
bool spfa(double x)
{
	deque<int> q;
	for(int i = 1;i <= n;i++) dis[i] = 1e10;
	memset(vis,0,sizeof(vis));
	q.push_back(1);
	vis[1] = 1;
	dis[1] = 0;
	while(!q.empty())
	{
		int t = q.front();
		q.pop_front();
		vis[t] = 0;
		for(int i = head[x];i;i = nxt[i])
			if(dis[to[i]] > dis[t] + (x * d[i] - f[i]))
			{
				dis[to[i]] = dis[t] + (x * d[i] - f[i]);
				if(!vis[to[i]])
				{
					vis[to[i]] = 1;
					if(q.empty() || dis[to[i]] < dis[q.front()]) q.push_front(to[i]);
					else q.push_back(to[i]);
				}
			}
	}
	return dis[n] <= 0;
}
int main()
{
	scanf("%d%d",&n,&m);
	int x,y,z,w;
	for(int i = 1;i <= m;i++)
	{
		scanf("%d%d%d%d",&x,&y,&z,&w);
		add(x,y,z,w);
	}
	double l = 0.0000000001,r = 10000.00000000001;
	while(r - l >= 0.0000000001)
	{
		double mid = (l + r) / 2;
		//cout << mid << endl;
		if(spfa(mid)) l = mid + 0.0000000001;
		else r = mid;
	}
	printf("%.10f",l);
	return 0;
}

报错信息:29行 19列 invalid types int[200001][double] for array subscript

(改成什么变量名都没用!)

2023/10/14 21:54
加载中...