wa求助
查看原帖
wa求助
697284
__hank0728楼主2023/3/11 19:31
#include <bits/stdc++.h>
using namespace std;
#define int long long

const int N = 1e4 * 11;
int n, m, k, s, t, ans = 2147483647, dis[N + 1];
vector<pair<int, int> > f[N + 1];
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > pq;
bool vis[N + 1];

void dijkstra() {
	for (int i = 1; i <= (k + 1) * n; ++ i) dis[i] = 2147483647;
	pq.push(make_pair(0, s));
	dis[s] = 0;
	while (!pq.empty()) {
		int u = pq.top().second;
		pq.pop();
		if (vis[u]) continue;
		vis[u] = true;
		for (int i = 0; i < f[u].size(); ++ i) {
			int v = f[u][i].first, w = f[u][i].second;
			if (dis[u] + w < dis[v]) {
				dis[v] = dis[u] + w;
				pq.push(make_pair(dis[v], v));
			}
		}
	}
}

signed main() {
	cin >> n >> m >> k >> s >> t;
	for (int i = 1; i <= m; ++ i) {
		int u, v, w;
		cin >> u >> v >> w;
		f[u].push_back(make_pair(v, w));
		f[v].push_back(make_pair(u, w));
		for (int j = 1; j <= k; ++ j) {
			f[(j - 1) * n + u].push_back(make_pair(j * n + v, 0));
			f[(j - 1) * n + v].push_back(make_pair(j * n + u, 0));
			f[j * n + u].push_back(make_pair(j * n + v, w));
			f[j * n + v].push_back(make_pair(j * n + u, w));
		}
	}
	dijkstra();
	for (int i = 0; i <= k; ++ i) ans = min(ans, dis[i * n + t]);
	cout << ans; 
} 
2023/3/11 19:31
加载中...