社区讨论
spfa求调
P3371【模板】单源最短路径(弱化版)参与者 3已保存回复 13
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 13 条
- 当前快照
- 1 份
- 快照标识符
- @lo7p5wki
- 此快照首次捕获于
- 2023/10/27 05:29 2 年前
- 此快照最后确认于
- 2023/10/27 05:29 2 年前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int fir[200005],nxt[2000005],son[200005],w[200005],tot,n,m,s,dis[200005],vis[200005];
int q[10000005],h=1,t=0;
void read(int &x){
x=0;int f=1;char c=getchar();
while(!(c<='9'&&c>='0')){if(c=='-')f=-1;c=getchar();}
while(c<='9'&&c>='0')x=(x<<1)+(x<<3)+(c^48),c=getchar();
x*=f;
}
void add(int x,int y,int z){
son[++tot]=y;nxt[tot]=fir[x];fir[x]=tot;w[tot]=z;
}
void spfa(){
memset(dis,127,sizeof(dis));
q[++t]=s;dis[s]=0;vis[s]=true;
while(h<=t){
int x=q[h];h++;vis[x]=false;
for(int i=fir[x];i;i=nxt[i]){
if(dis[son[i]]>dis[x]+w[i]){
dis[son[i]]=dis[x]+w[i];
if(!vis[son[i]]){
vis[son[i]]=true;
q[++t]=son[i];
}
}
}
}
}
signed main(){
read(n);read(m);read(s);
for(int i=1;i<=m;i++){
int x,y,z;read(x);read(y),read(z);
add(x,y,z);
}
spfa();
for(int i=1;i<=n;i++)printf("%lld ",dis[i]);
return 0;
}
回复
共 13 条回复,欢迎继续交流。
正在加载回复...