dijkstra10WA求调
查看原帖
dijkstra10WA求调
1272259
cgxd楼主2024/8/14 19:27
#include<bits/stdc++.h>
using namespace std;
int n, m, s, t;
vector<int> to(1), dis(1);
vector<size_t> nxt(1);
size_t head[2505];
void add(int x, int y, int z){
	to.push_back(y), dis.push_back(z), nxt.push_back(head[x]);
	head[x] = to.size() - 1lu;
}vector<int> ans(2505, INT_MAX);
multimap<int, int> mp;
int dijkstra(int s, int t){
	ans[s] = 0;
	mp.insert(pair<int, int>(0, s));
	while(mp.size()){
		int x = mp.begin() -> second;
		if(x == t)
			return mp.begin() -> first;
		mp.erase(mp.begin());
		for(size_t i = head[x]; i; i = nxt[i]){
			int y = to[i];
			if(ans[y] > ans[x] + dis[i])
				mp.insert(pair<int, int>(ans[y] = ans[x] + dis[i], y));
		}
	}return 0;
}signed main(){
	scanf("%d%d%d%d", &n, &m, &s, &t);
	while(m--){
		int u, v, w;
		scanf("%d%d%d", &u, &v, &w);
		add(u, v, w);
	}printf("%d", dijkstra(s, t));
	return 0;
}
2024/8/14 19:27
加载中...