求助!堆优化dijkstra就AC了两个点,求求了,谢谢大佬!
查看原帖
求助!堆优化dijkstra就AC了两个点,求求了,谢谢大佬!
371988
Sleeper_Liang楼主2021/11/4 22:25

堆优化dijikstra,1,3,AC了,其他是WA

#include<bits/stdc++.h>
#include<cmath>
#define inf 2147483647
#define ll long long
using namespace std;
int net[500050],t[500050],v[500005];
struct node{
	int v,si;
	bool operator < (const node &b)const
	{
		return v<b.v;
	}
};
priority_queue<node>q;
ll f[10005],used[10005];
int num=0,head[10005];
void add_(int from,int to,int value)
{
	t[++num]=to;
	v[num]=value;
	net[num]=head[from];
	head[from]=num;
}
int main()
{
	int n,m,s;
	scanf("%ld %ld %ld",&n,&m,&s);
	for(int i=1,a,b,c;i<=m;i++)
	{
		cin>>a>>b>>c;
		add_(a,b,c);
	}
	for(int i=1;i<=n;i++)
	{
		f[i]=inf;
	}
	f[s]=0;
	node sa;//队首
	sa.si=s;
	sa.v=0;
	q.push(sa);
	while(!q.empty())
	{
		node x=q.top();
		q.pop();
		if(used[x.si]) continue;
		used[x.si]=1;
		for(int i=head[x.si];i;i=net[i])
		{
			if(f[t[i]]>f[x.si]+v[i]){
				f[t[i]]=f[x.si]+v[i];
				sa.v=f[t[i]];
				sa.si=t[i];
				q.push(sa);	
			}
		}
	}
	for(int i=1;i<=n;i++)
	cout<<f[i]<<" ";
	return 0;
}
2021/11/4 22:25
加载中...