社区讨论

我连sb最短路都不会写了?!!

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

讨论操作

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

当前回复
10 条
当前快照
1 份
快照标识符
@mi86itpg
此快照首次捕获于
2025/11/21 09:26
4 个月前
此快照最后确认于
2025/11/21 09:26
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define maxint 2147483647
using namespace std;
const int MAXN=100001;
int to[MAXN],head[MAXN],next[MAXN],val[MAXN];
inline void add(int u,int w,int v){
	static int ccnt=0;
	ccnt++;
	head[u]=ccnt;
	next[ccnt]=head[u];
	val[ccnt]=v;
	to[ccnt]=w;
}
bool visit[20000]={0};
long long dis[20000];
int n,m,s;
int main(){
	scanf("%d%d%d",&n,&m,&s);
	for(int i=1;i<=m;i++){
		int u,w,v;
		scanf("%d%d%d",&u,&v,&w);
		add(u,v,w);
	}
	memset(dis,maxint,sizeof(dis));
	int curr=s;
	dis[s]=0;
	long long minn;
	while(!visit[curr]){
		visit[curr]=true;
		for(int i=head[curr];i;i=next[i]){
			int v=to[i];
			if(!visit[v]&&dis[v]>dis[curr]+val[i]){
				dis[v]=dis[curr]+val[i];
			}
		}
		minn=maxint;
		for(int i=1;i<=n;i++){
			if(!visit[i]&&dis[i]<minn){
				minn=dis[i];
				curr=i;
			}
		}
	}
	for(int i=1;i<=n;i++)printf("%lld ",dis[i]);
	return 0;
}

回复

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

正在加载回复...