邻接表求调,16分
查看原帖
邻接表求调,16分
588080
n_bluetea楼主2024/3/11 12:00
#include<bits/stdc++.h>
using namespace std;

void dijkstra(vector<vector<pair<long long,long long>>>& graph,vector<long long>&dis,long long start)
{
	priority_queue<pair<long long, long long>, vector<pair<long long, long long>>, less<pair<long long, long long>>> pq;
	dis[start] = 0;

	pq.push(make_pair(0, start));
	while (!pq.empty())
	{
		long long    u = pq.top().second;
		long long dist = pq.top().first;
		pq.pop();

		if (dist > dis[u]) continue;
		for (int i = 0; i < graph[u].size(); i++)
		{
			long long      v = graph[u][i].first;
			long long weight = graph[u][i].second;

			if (dis[u] != 1e9 && weight != 1e9 && dis[v] > dis[u] + weight) {
				dis[v] = dis[u] + weight;
				pq.push(make_pair(dis[v], v));
			}
		}
	}

}
int main()
{
	int n, m, s;
	cin >> n >> m >> s;

	vector<long long> dis(n + 1, 1e9);
	vector < vector<pair<long long, long long>>> graph(n + 1);
	for (int i = 1; i <= n; i++)
	{
		long long x, y, w;
		cin >> x >> y >> w;
		graph[x].push_back({ y,w });
	}

	dijkstra(graph,dis,s);

	for (int i = 1; i <= n; i++)
	{
		cout << dis[i] << " ";
	}
	return 0;
}

2024/3/11 12:00
加载中...