被Hack数据爆杀了
查看原帖
被Hack数据爆杀了
1042486
larryia楼主2024/3/16 21:46
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 1e4 + 10;
struct edge {
	int v, w;
};
vector<edge> e[N];
int d[N], vis[N];
int n, m, k, s, t;
void dij(int s) {
	memset(d, 0x3f, sizeof d);
	d[s] = 0;
	priority_queue <pair<int, int> > q;
	q.push({0, s});
	while (q.size()) {
		auto temp = q.top();
		q.pop();
		int u = temp.second;
		if (vis[u]) continue;
		
		vis[u] = 1;
		for (auto ed : e[u]) {
			int v = ed.v, w = ed.w;
			if (d[v] > d[u] + w) {
				d[v] = d[u] + w;
				q.push({-d[v], v});
			}
			
		}
	}
}
int main() {
	cin >> n >> m >> k >> s >> t;
	for (int i = 0; i < m; i++) {
		int a, b, c;
		cin >> a >> b >> c;
		for (int j = 0; j <= k; j++) {
			e[a + j * n].push_back({b + j * n, c});
			e[b + j * n].push_back({a + j * n, c});
			if (j < k) {
				e[a + j * n].push_back({b + j * n + n, 0});
				e[b + j * n].push_back({a + j * n + n, 0});
			}
			
		}
	}
	dij(s);
	cout << d[t + n * k] << endl;
	return 0;
}
2024/3/16 21:46
加载中...