WA on #11 求调 马蜂良好
查看原帖
WA on #11 求调 马蜂良好
360780
Qerrj楼主2024/5/30 15:40
#include<bits/stdc++.h>
#define piii pair<int, pair<int, int>> 
#define pii pair<int, int>
#define fst first
#define scd second
using namespace std;
const int N = 1e4 + 10;
const int M = 5e4 + 10; 
int n, m, k, s, t, head[N], tot;
struct Edge{ int to, next, dis; }edge[M << 1];
void add(int x, int y, int z) {
	edge[++tot] = {y, head[x] ,z};
	head[x] = tot;
}
int dp[N][15], vis[N][15];
priority_queue<piii> q;
void Dijkstra() {
	memset(dp, 0x3f, sizeof dp);
	dp[s][0] = 0;
	q.push({0, {s, 0}});
	while(!q.empty()) {
		pii u = q.top().scd; q.pop();
		if(vis[u.fst][u.scd]) continue;
		vis[u.fst][u.scd] = 1;
		for(int i = head[u.fst]; i; i = edge[i].next) {
			int v = edge[i].to, cnt = u.scd;
			if(cnt < k && dp[v][cnt + 1] > dp[u.fst][cnt]) {
				dp[v][cnt + 1] = dp[u.fst][cnt];
				q.push({-dp[v][cnt + 1], {v, cnt + 1}});
			}
			if(dp[v][cnt] > dp[u.fst][cnt] + edge[i].dis) {
				dp[v][cnt] = dp[u.fst][cnt] + edge[i].dis;
				q.push({-dp[v][cnt], {v, cnt}});
			}
		} 
	}
}
int main() {
	scanf("%d%d%d%d%d", &n, &m, &k, &s, &t);
	for(int i = 1, x, y, z; i <= m; i++) {
		scanf("%d%d%d", &x, &y, &z);
		add(x, y, z); add(y, x, z);
	}
	Dijkstra();
	int mn = 2e9;
	for(int i = 0; i <= k; i++) 
		mn = min(mn, dp[t][k]);
	printf("%d", mn);
	return 0;
}
2024/5/30 15:40
加载中...