社区讨论

spfa暴0,求助

P3371【模板】单源最短路径(弱化版)参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhjujrh0
此快照首次捕获于
2025/11/04 08:44
4 个月前
此快照最后确认于
2025/11/04 08:44
4 个月前
查看原帖
spfa暴0,求助
CPP
#include <bits/stdc++.h>
using namespace std;
const int N=1e4+10,M=5e5+10;
int n,m,s,idx;
int h[N],to[M],w[M],nxt[M];
long long dist[N];
queue<int> qt;
bool vis[N];

void spfa()
{
	memset(dist,0x3f,sizeof(dist));
	dist[s]=0;
	qt.push(s);
	while(qt.size())
	{
		int t=qt.front();qt.pop();
		if(vis[t]) continue;
		vis[t]=1;
		for(int i=h[t];i!=-1;i=nxt[i])
		{
			int k=to[i];
			if(dist[k]>dist[t]+w[i])
			{
				dist[k]=dist[t]+w[i];
				qt.push(k);
			}
		}
	}
}

void add(int x,int y,int z)
{
	to[++idx]=y;
	w[idx]=z;
	nxt[idx]=h[x];
	h[x]=idx;
}

int main()
{
	memset(h,-1,sizeof(h));
	cin>>n>>m>>s;
	int x,y,z;
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d%d",&x,&y,&z);
		add(x,y,z);
	}
	spfa();
	for(int i=1;i<=n;i++)
	{
		if(dist[i]==0x3f3f3f3f3f3f3f3f) printf("%lld ",INT_MAX);
		else printf("%lld ",dist[i]);
	}
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...