社区讨论
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 条回复,欢迎继续交流。
正在加载回复...