Dijkstra TLE #1 & #6 求助
查看原帖
Dijkstra TLE #1 & #6 求助
1058410
Gcc_Gdb_7_8_1楼主2024/10/30 21:46

Code:

#include <bits/stdc++.h>
using namespace std;

#define LL long long
#define Pii pair<int, int>

namespace gdb7
{
	struct Edge {
		int w, to, nxt;
	} edges[500010];
	int head[100010], eid, dis[100010], vis[100010], n, m, s;
	inline void insert(int u, int v, int w) {
		edges[++eid].w = w;
		edges[eid].to = v;
		edges[eid].nxt = head[u];
		head[u] = eid;
	}
	struct Node {
		int w, u;
		inline const bool operator<(const Node &rhs) const {
			return w < rhs.w;
		}
	};
	priority_queue<Node> pq;
	void dijkstra(int s) {
		memset(vis, 0, sizeof(vis));
		for (int i = 1; i <= n; ++i) {
			dis[i] = 2147483647;
		}
		dis[s] = 0;
		pq.push({0, s});
		while (!pq.empty()) {
			Node tmp = pq.top();
			vis[tmp.u] = 1;
			pq.pop();
			for (int i(head[tmp.u]); ~i; i = edges[i].nxt) {
				if (dis[edges[i].to] > dis[tmp.u] + edges[i].w) {
					dis[edges[i].to] = dis[tmp.u] + edges[i].w;
					pq.push({tmp.w + edges[i].w, edges[i].to});
				}
			}
		}
	}
	int main() {
		memset(head, -1, sizeof(head));
		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);
			insert(u, v, w);
		}
		dijkstra(s);
		for (int i = 1; i <= n; ++i) {
			printf("%d%c", dis[i], " \n"[i == n]);
		}
	    return 0;
	}
};

int main()
{
	return gdb7::main();
}

弱化版 AC,标准版 TLE #1 & #6。

2024/10/30 21:46
加载中...