链式前向星+堆优化dijkstra第三个点WA了,90分,是什么原因?
查看原帖
链式前向星+堆优化dijkstra第三个点WA了,90分,是什么原因?
665455
our_gzzx_coding楼主2022/11/22 12:51

链式前向星+堆优化dijkstra

#include <iostream>
#include <cstring>
#include <queue>
using namespace std;

bool vis[1000010];
int cnt=0,head[1000010],dis[1000010],s;
struct edge
{
	int next,to,w=2147483647;
}edge[1000010];
void add(int u,int v,int d)
{
	edge[++cnt].to=v,edge[cnt].w=min(edge[cnt].w,d),edge[cnt].next=head[u],head[u]=cnt;
}
void dijkstra()
{
	memset(dis,999999,sizeof(dis));
	dis[s]=0;
	priority_queue<pair<int,int> > q;
	q.push(make_pair(0,s));
	while(!q.empty())
	{
		int x=q.top().second;
		q.pop();
		if(vis[x])continue;
		vis[x]=1;
		for(int i=head[x];i!=-1;i=edge[i].next)
		{
			int y=edge[i].to,z=edge[i].w;
			if(dis[x]+z<dis[y])
			{
				dis[y]=dis[x]+z;
				q.push(make_pair(-dis[y],y));
			}
		}
	}
}
int main()
{
	memset(head,-1,sizeof(head));
	int n,m;
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++)
	{
		int u,v,d;
		cin>>u>>v>>d;
		add(u,v,d);
	}
	dijkstra();
	for(int i=1;i<=n;i++)cout<<dis[i]<<" ";
	return 0;
}
2022/11/22 12:51
加载中...