麻烦路过大佬看一下,是因为vector存图导致TLE了吗?
查看原帖
麻烦路过大佬看一下,是因为vector存图导致TLE了吗?
905920
AC_Yee楼主2024/4/5 22:45

算法使用的是dijkstra的堆优化(set) 下面是代码:

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

int un = 2147483647;

int n, m, s;
vector< pair<int, int> > g[10005];
int dist[10005];

void dsa(int st, int en) {
	memset(dist, 127, sizeof(dist));
	dist[st] = 0;
	set< pair<int, int> > q;
	q.clear();
	for (int i = 1; i <= n; ++ i) {
		q.insert({dist[i], i});
	}
	
	while (!q.empty()) {
		int u = q.begin()->second; q.erase(q.begin());
		if (dist[u] > (1 << 30) || u == en) break;
		
		for (auto i : g[u]) {
			int v = i.first, w = i.second;
			if (dist[u] + w < dist[v]) {
				q.erase({dist[v], v});
				dist[v] = dist[u] + w;
				q.insert({dist[v], v});
			}
		} 
	}
	if (dist[en] > (1 << 30)) cout << un << " ";
	else cout << dist[en] << " ";
}

void solve() {
	cin >> n >> m >> s;
	for (int i = 1; i <= m; ++ i) {
		int u, v, w;
		cin >> u >> v >> w;
		g[u].push_back({v, w});
	}
	
	for (int i = 1; i <= n; ++ i) {
		dsa(s, i);
	}
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);
	
	solve();
}
2024/4/5 22:45
加载中...