社区讨论

标准版Ac,弱化70WAWAWA求调

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

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@lyqowez3
此快照首次捕获于
2024/07/18 11:06
2 年前
此快照最后确认于
2024/07/18 11:48
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
#define INF 2147483647
#define int long long
int n,m,s,u,v,w;
int cnt,head[100005];
int dist[100005],vis[100005];
struct Edge{
	int to,dis,next;
}edge[200005];
void Add_edge(int from,int to,int w)
{
	edge[++cnt].to=to;
	edge[cnt].dis=w;
	edge[cnt].next=head[from];
	head[from]=cnt;
}
struct node{
	int id,dis;
	bool operator < (const node &a)const{ return a.dis<dis;}
};
void Dijkstra()
{
	priority_queue<node> q;
	q.push(node {s,0});
	for(int i=1;i<=n;i++) dist[i]=INF;
	dist[s]=0;
	while(!q.empty())
	{
		node a=q.top();q.pop();
		int now=a.id;
		if(vis[now]) continue;
		vis[now]=1;
		for(int i=head[now];i;i=edge[i].next)
		{
			int j=edge[i].to;
			if(dist[now]+edge[i].dis<dist[j]){
				dist[j]=dist[now]+edge[i].dis;
				q.push(node{j,dist[j]});
			}
			 
		}
	}
}
signed main()
{
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&u,&v,&w);
		Add_edge(u,v,w);
	}
	Dijkstra();
	for(int i=1;i<=n;i++){
		if(s==i) cout<<0<<" ";
		else cout<<dist[i]<<" ";
	}
	return 0;
} 

回复

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

正在加载回复...