这道题如何优化到底?
查看原帖
这道题如何优化到底?
1059747
longlong_int楼主2024/7/8 21:26

玄关求助,第三个点死活过不去,1.05s。。。

#include <bits/stdc++.h>
#define INTINF 2147483647
#define LLINF 9223372036854775807
typedef long long ll;
using namespace std;

const int N = 1e5 + 10;
int n, m, s;
vector<pair<int, int> > graph[N];
bool f[N];
int dis[N];
struct pii
{
	int first, second;
	friend bool operator >(const pii a, const pii b) {return a.first > b.first;}
};

priority_queue<pii, vector<pii>, greater<pii> > q;

inline void dijkstra()
{
	for (int i = 1; i <= n; i++)
		dis[i] = 1e9 + 10;
	
	dis[s] = 0;
	q.push({0, s});
	
	while (!q.empty())
	{
		int id = q.top().second;
		f[id] = true;
		q.pop();
		for (auto j: graph[id])
		{
			if (dis[j.first] > dis[id] + j.second)
			{
				dis[j.first] = dis[id] + j.second;
				q.push({dis[j.first], j.first});
			}
		}
	}
}

int main()
{
	scanf("%d %d %d", &n, &m, &s);
	for (int i = 1; i <= m; i++)
	{
		int u, v, w;
		scanf("%d %d %d", &u, &v, &w);
		graph[u].push_back({v, w});
	}
	
	dijkstra();
	
	for (int i = 1; i <= n; i++)
	{
		printf("%d ", dis[i]);
	}
	return 0;
}
2024/7/8 21:26
加载中...