91pt WA#3 玄关求调
查看原帖
91pt WA#3 玄关求调
1361387
zsx_楼主2025/7/6 20:17
#include <bits/stdc++.h>
using namespace std;
const int N=1e7;
struct edge {
	int v,w,h;
} e[100010];
int n,m,K,s,t,cnt,h[10010],d[10010][11];
bool vis[10010][11];
struct node{
	int u,k;
	bool operator <(const node &x) const {
		return d[u][k]>d[x.u][x.k];
	}
};
inline void add(int u,int v,int w) {
	e[++cnt]=(edge){v,w,h[u]};
	h[u]=cnt;
}
inline void dijkstra() {
	priority_queue<node>q;
	memset(d,0x3f,sizeof(d));
	q.push((node){s,0});
	d[s][0]=0;
	vis[s][0]=1;
	while(!q.empty()){
		node x=q.top();
		q.pop();
		vis[x.u][x.k]=0;
		for (int i=h[x.u],v,u,k;i;i=e[i].h){
			u=x.u,k=x.k,v=e[i].v;
			if (d[v][k]>d[u][k]+e[i].w){
				d[v][k]=d[u][k]+e[i].w;
				if (!vis[v][k]){
					q.push((node){v,k});
				}vis[v][k]=1;
			}if (d[v][k+1]>d[u][k]){
				d[v][k+1]=d[u][k];
				if (!vis[v][k+1]&&k<K){
					q.push((node){v,k+1});
				}vis[v][k+1]=1;
			}
		}
	}
}
int main() {
    cin >>n>>m>>K>>s>>t;
	for (int i=1,u,v,w;i<=m;i++){
		cin >>u>>v>>w;
		add(u,v,w);
		add(v,u,w);
	}
	dijkstra();
	int ans=1e9;
	for (int i=0;i<=K;i++){
		ans=ans<d[t][i]? ans:d[t][i];
	}
	cout <<ans;
}
2025/7/6 20:17
加载中...