优先队列优化求调
查看原帖
优先队列优化求调
690320
MoGuYun_12楼主2023/11/24 23:58
#include <bits/stdc++.h>

using namespace std;
int n,m,s;
int dis[100001];
vector<int> e[100001];
void dij()
{
	priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
	memset(dis,0x3f,sizeof dis);
	dis[s]=0;
	q.push({dis[s],s});
	while(!q.empty())
	{
		int x=q.top().second;
		q.pop();
		for(int i=0;i<e[x].size();i+=2)
		{
			int y=e[x][i],w=e[x][i+1];
			if(dis[y]>dis[x]+w)
			{
				dis[y]=dis[x]+w;
				q.push({dis[y],y});
			}
		}
	}
}
int main()
{
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		e[u].push_back(v),e[u].push_back(w);
		e[v].push_back(u),e[v].push_back(w);
	}
	dij();
	for(int i=1;i<=n;i++)
		cout<<dis[i]<<' ';
	return 0;
}
2023/11/24 23:58
加载中...