Dij32pts,悬馆
查看原帖
Dij32pts,悬馆
778382
wch666楼主2025/2/7 11:37
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
int n,m,s;
vector<pair<int, int> > vec[maxn];
int b[maxn];
int minn = INT_MAX;
int dis[maxn];
bool vis[maxn];
priority_queue<int> q;
void add(int u, int v, int w)
{
	vec[u].push_back(make_pair(v, w));
}
int main()
{
	cin>>n>>m>>s;
	for(int i = 1; i <= m; i++)
	{
		int x,y,z;
		cin>>x>>y>>z;
		add(x, y, z);
	}
	for(int i = 1; i <= n; i++)
		dis[i]=INT_MAX;
	q.push(s);
	dis[s] = 0;
	while(!q.empty())
	{
		int u = q.top();
		q.pop();
		if(vis[u])
			continue;
		vis[u] = true;
		for(auto p : vec[u])
		{
			int v = p.first;
			int w = p.second;
			if(dis[v] > dis[u] + w)
			{
				dis[v] = dis[u] + w;
				if(!vis[v])
					q.push(v);
			}
		}
	}
	for(int i = 1; i <= n; i++)
		cout<<dis[i]<<' ';
	return 0;
}
2025/2/7 11:37
加载中...