10pts求调,悬关
查看原帖
10pts求调,悬关
1127386
s12914楼主2025/2/7 16:44

本人萌新,实在看不出来了,求大佬帮忙调一下。

#include<bits/stdc++.h>
using namespace std;
int n,m,k,u,v1,d,s,t,a[10005][15],abcd=2e9,vis[10005];
vector<pair<int,int> > v[50005];
priority_queue<pair<int,int> > q;
int main(){
	cin>>n>>m>>k>>s>>t;
	while(m--){
		cin>>u>>v1>>d;
		v[u].push_back(make_pair(v1,d));
		v[v1].push_back(make_pair(u,d));
	}
	memset(a,0x3f,sizeof a);
	a[s][0]=0;
	q.push(make_pair(s,a[s][0]));
	while(!q.empty()){
		u=q.top().second;
		q.pop();
		if(vis[u]) continue;
		for(int j=0;j<v[u].size();j++){
			v1=v[u][j].first,d=v[u][j].second;
			for(int i=0;i<=k;i++){
				if(a[v1][i]>a[u][i]+d){
					a[v1][i]=a[u][i]+d;
					q.push(make_pair(-a[v1][i],v1));
				}
				if(i<k){
					a[v1][i+1]=a[u][i];
					q.push(make_pair(-a[v1][i+1],v1));
				}
			}
		}
		vis[u]=1;
	}
	for(int i=0;i<=k;i++) abcd=min(abcd,a[t][i]);
	cout<<abcd;
	return 0;
}

感谢大佬耐心看完,不喜勿喷。

2025/2/7 16:44
加载中...