救救孩子,WA傻了(迪杰斯特拉算法
  • 板块P1576 最小花费
  • 楼主洛璟
  • 当前回复6
  • 已保存回复6
  • 发布时间2020/10/28 09:16
  • 上次更新2023/11/5 09:41:50
查看原帖
救救孩子,WA傻了(迪杰斯特拉算法
198719
洛璟楼主2020/10/28 09:16
#include<bits/stdc++.h>
using namespace std;
int n,m,s,e;
double dis[2010];
int nxt[100010],h[2010],ver[100010],edge[100010],tot;
bool fg[2020];
priority_queue<pair<double,int> >q;
inline int read()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')w=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
	return s*w;
}
void dijkstra()
{
	q.push(make_pair(1,s));
	while(!q.empty())
	{
		int tmp=q.top().second;
		q.pop();
		if(fg[tmp]==1) continue;
		fg[tmp]=1;
		for(int i=h[tmp]; i!=0; i=nxt[i])
		{
			if(dis[ver[i]]<dis[tmp]*((100-edge[i])*0.01));
			dis[ver[i]]=dis[tmp]*((100-edge[i])*0.01);
			q.push(make_pair(dis[ver[i]],ver[i]));
		}
	}
}
void add(int x,int y,int z)
{
	tot++;
	ver[tot]=y;
	nxt[tot]=h[x];
	h[x]=tot;
	edge[tot]=z;
}
int main()
{
	n=read();
	m=read();
	for(int i=1; i<=m; i++)
	{
		int x,y,z;
		x=read();
		y=read();
		z=read();
		add(x,y,z);
		add(y,x,z);
	}
	s=read();
	e=read();
	dis[s]=1;
	dijkstra();
	printf("%.8lf",100/dis[e]);
	return 0;
}

全WA,顺便还爆了最后两个点的内存(大雾

2020/10/28 09:16
加载中...