摸不着头脑.jpg
查看原帖
摸不着头脑.jpg
167235
qszy楼主2020/6/13 16:48

虽然样例可以过,但是全WA了……

但这样也就算了,真正让人摸不着头脑的是,我下了一组数据之后,发现这就是样例……

求各路大佬们帮帮彻底懵逼的蒟蒻吧

蟹蟹!

#include<bits/stdc++.h>
#define MAX 1000
using namespace std;
bool vis[MAX+5];
double dis[MAX+5];
struct Edge
{
	int to,c,f;
	double val;
};

vector<Edge> G[MAX + 5];
struct cmp
{
	bool operator() (Edge x,Edge y)
	{
		return x.val<y.val;
	}
};
priority_queue<Edge,vector<Edge>,cmp> q;
void dij(int s,int n)
{
	for(int i=1;i<=n;i++)
	{
		vis[i]=false;
		dis[i]=0;
	}
	dis[s]=0;
	Edge now,nxt;
	now.to=s;
	now.val=0;
	q.push(now);
	while(!q.empty())
	{
		now=q.top();
		q.pop();
		if(vis[now.to])
			continue;
		vis[now.to]=true;
		for(int i=0;i<G[now.to].size();i++)
		{
			nxt=G[now.to][i];
			if((double)min(now.f,nxt.f) / (now.c+nxt.c) > dis[nxt.to])
			{
				dis[nxt.to]=(double)min(now.f,nxt.f) / (now.c+nxt.c);
				nxt.f=min(now.f,nxt.f);
				nxt.c=(now.c+nxt.c);
				now.val=dis[nxt.to];
				q.push(nxt);
			}
		}
	}
}
int main()
{
	int n, m ;
	cin>>n>>m;
	Edge now;
	int u,v;
	while(m--)
	{
		cin >> u >> now.to >> now.c >> now.f;
		now.val=now.f/now.c;
		G[u].push_back(now);
		v=now.to;
		now.to=u;
		G[v].push_back(now);
	}
	dij(1, n);
	int ans=floor(dis[n]*1000000);
	cout<<ans<<endl; 
	return 0;
}
2020/6/13 16:48
加载中...