Dijkstra 90pts WA on 2 求助悬关
查看原帖
Dijkstra 90pts WA on 2 求助悬关
780514
N1tr0us_Acid楼主2024/4/14 20:51

rt

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 2 * 1e5 + 10;
int h[N], e[N], idx, w[N], ne[N];
int pb, pa1, pa2;
int c, p;
int dist[N];
bool st[N];
typedef pair <int, int> PII;
void add(int a, int b, int k) {
	e[idx] = b, w[idx] = k, ne[idx] = h[a], h[a] = idx ++;
}
void dijkstra(int root) {
	memset(dist, 0x3f3f, sizeof(dist));
	memset(st, 0, sizeof(st));
	dist[root] = 0;
	priority_queue <PII, vector <PII>, greater <PII> > heap;
	heap.push({0, root});
	while (heap.size()) {
		auto t = heap.top();
		heap.pop();
		int dis = t.first, ver = t.second;
		if(st[ver]) continue;
		st[ver] = 1;
		for (int i = h[ver]; i != -1; i = ne[i]) {
			int j = e[i];
			if(dist[j] > dis + w[i]) {
				dist[j] = dis + w[i];
				heap.push({dist[j], j});
			}
		}
		
	}
}
int main (void) {
	memset(h, -1, sizeof(h));
	cin >> c >> p >> pb >> pa1 >> pa2;
	for (int i = 1; i <= c; i ++) {
		int a, b, k;
		cin >> a >> b >> k;
		add(a, b, k);
		add(b, a, k);
	}
	
	dijkstra(pb);
	int ans = min(dist[pa1], dist[pa2]);
	dijkstra(pa1);
	ans += dist[pa2];
	cout << ans;
	return 0;
}

2024/4/14 20:51
加载中...