46pts 求调
查看原帖
46pts 求调
757139
zsh_haha楼主2023/7/29 16:55
#include<bits/stdc++.h>
using namespace std;
long long k,n,m;
long long st,fi;
long long dis[1100004];
struct node{
	long long this_dian,next_dian,next_bian,this_bian_long;
}edge[5500005];
long long cnt,h[5500005];
void add(long long u,long long v,long long w){
	edge[++cnt].next_bian=h[u];
	h[u]=cnt;
	edge[cnt].next_dian=v;
	edge[cnt].this_dian=u;
	edge[cnt].this_bian_long=w;
}
queue<long long>q;
bool inq[1100004];
void spfa(){
	q.push(st);
	dis[st]=0;
	while(!q.empty()){
		long long u=q.front();
		q.pop();
		if(inq[u]){
			continue;
		}
		inq[u]=true;
		for(long long i=h[u];i!=-1;i=edge[i].next_bian){
			long long v=edge[i].next_dian;
			if(dis[v]>dis[u]+edge[i].this_bian_long){
				dis[v]=dis[u]+edge[i].this_bian_long;
				q.push(v);
			}
		}
	}
}
int main(){
	cin>>n>>m>>k;
	for(long long i=0;i<=n*(k+1);i++){
		dis[i]=1000000000001;
		h[i]=-1;
	}
	cin>>st>>fi;
	for(long long i=1;i<=m;i++){
		long long x,y,z;
		cin>>x>>y>>z;
		add(x,y,z);
		add(y,x,z);
		for(long long j=1;j<=k;j++){
			add(x+j*n,y+j*n,z);
			add(y+j*n,x+j*n,z);
			add(x+(j-1)*n,y+j*n,0);
			add(y+(j-1)*n,x+j*n,0);
		}
	}
	for(int i=0;i<n;i++){
		for(int j=1;j<=k;j++){
			add(i+n*(j-1),i+n*j,0);
		}	
	}
	spfa();
	cout<<dis[fi+n*k];
	return 0;
}
2023/7/29 16:55
加载中...