WA 7个点 求助
查看原帖
WA 7个点 求助
398310
hundunqidian楼主2022/8/13 17:52
//P4568 
#include<bits/stdc++.h>
using namespace std;
int const X=1e7+10;
int n,m,k,s,t,a,b,c,num; 
int head[X];
long long dis[X];
bool vis[X];
struct edge{
	int to,next,w;
};
edge e[X];
struct node{
	int to,w;
	bool operator<(const node &a) const{return w>a.w; }
}; 
priority_queue<node> q;
node temp;
void add(int a,int b,int c){
	e[++num].next=head[a];
	e[num].to=b;
	e[num].w=c;
	head[a]=num;
}
int main(){
	cin>>n>>m>>k>>s>>t;
	s++; t++;
	for(int i=1;i<=m;i++){
		cin>>a>>b>>c;
		b++; a++;
		add(a,b,c);
		add(b,a,c);
		for(int j=1;j<=k;j++){//分层图 
			add(a+(j-1)*n,b+j*n,0);//不同层间连边权为0 
			add(b+(j-1)*n,a+j*n,0);
			add(a+j*n,b+j*n,c);//同层正常连 
			add(b+j*n,a+j*n,c);
		}
	}
	memset(dis,0x3f,sizeof(dis));
	temp.to=s; temp.w=0;
	q.push(temp);
	dis[s]=0;
	while(!q.empty()){
		int u=q.top().to;
		q.pop();
		if(vis[u]) continue;
		vis[u]=true;
		for(int i=head[u];i;i=e[i].next){
			if(dis[e[i].to]>dis[u]+e[i].w){
				dis[e[i].to]=dis[u]+e[i].w;
				if(!vis[e[i].to]){
					temp.to=e[i].to;
					temp.w=e[i].w;
					q.push(temp);
				}
			}
		}
	}
	long long ans=INT_MAX;
	for(int i=0;i<=k;i++){
		ans=min(ans,dis[t+i*n]);
	}
	cout<<ans;
	return 0;
} 
2022/8/13 17:52
加载中...