新手求助
查看原帖
新手求助
719627
Ther_Yang楼主2022/8/17 00:29

dij+堆优化,样例汇率得0,求捞

#include<bits/stdc++.h>
#define N 200005
#define M make_pair
#define PII pair<double,int>
using namespace std;
int m,n,cnt,s,e;
int head[N];
double ans[N];
bool vis[N];
struct node{
	double dis;
	int to;
	int next;
}E[N];
priority_queue<PII> q;
inline void add(int u,int v,double d)
{
	E[++cnt].dis=1.0-(double)(d/100.0);
	E[cnt].to=v;
	E[cnt].next=head[u];
	head[u]=cnt;
}
inline void dijkstra()
{
	while(!q.empty())
	{
		int x=q.top().second;
		q.pop();
		if(vis[x]) continue;
		vis[x]=1;
		for(int i=head[x];i;i=E[i].next)
		{
			int v=E[i].to,w=E[i].dis;
			if(ans[v]<ans[x]*w)
			{
				ans[v]=ans[x]*w;
				q.push(M(ans[v],v));
			} 
		} 
	}
}
int main()
{
	std::ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int u,v;
		double d;
		cin>>u>>v>>d;
		add(u,v,d);
		add(v,u,d);
	}
	cin>>s>>e;
	memset(ans,-0x3fff,sizeof(ans)); 
	q.push(M(1.0,s));	
	ans[s]=1.0;
	dijkstra();
	printf("%.8f",100/ans[e]);
	return 0;
}
2022/8/17 00:29
加载中...