64pts,TLEon#4 7 8 9
查看原帖
64pts,TLEon#4 7 8 9
1070708
Caged_Bird楼主2024/4/14 13:19
#include<bits/stdc++.h>
using namespace std;
struct node{
	int toi,toj,w;
	bool operator<(const node& gama)const{
		return w<gama.w;
	}
	bool operator>(const node& nama)const{
		return w>nama.w;
	} 
};
priority_queue<node,vector<node>,greater<node> >q;
int n,m,k,d[15][10005],s,t,ans=2147483647;
bool f[15][10005];
vector<node>a[15][10005];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	memset(d,0x3f,sizeof d);
	cin>>n>>m>>k>>s>>t;
	if(s==t){
		cout<<0;
		return 0;
	}
	d[0][s]=0;
	q.push(node{0,s,0});
	for(int i=1;i<=m;i++){
		int u,v,p;
		cin>>u>>v>>p;
		for(int j=0;j<=k;j++){
			a[j][u].push_back(node{j,v,p});
			a[j][v].push_back(node{j,u,p});
			if(j==k)break;
			a[j][u].push_back(node{j+1,v,0});
			a[j][v].push_back(node{j+1,u,0});
		}
	}
	for(int i=0;i<=k;i++){
		for(int j=0;j<n;j++){
			while(!q.empty()&&f[q.top().toi][q.top().toj])q.pop();
			int t1=q.top().toi,t2=q.top().toj;
			f[t1][t2]=true;
			q.pop();
			for(int k=0;k<a[t1][t2].size();k++){
				if(d[a[t1][t2][k].toi][a[t1][t2][k].toj]>d[t1][t2]+a[t1][t2][k].w){
					d[a[t1][t2][k].toi][a[t1][t2][k].toj]=d[t1][t2]+a[t1][t2][k].w;
					q.push(node{a[t1][t2][k].toi,a[t1][t2][k].toj,d[a[t1][t2][k].toi][a[t1][t2][k].toj]});
				}
			}
		}
	}
	for(int i=0;i<=k;i++){
		ans=min(ans,d[i][t]);
	}
	cout<<ans;
	return 0;
}
2024/4/14 13:19
加载中...