大佬求救!为何会RE?
查看原帖
大佬求救!为何会RE?
797187
Rorou楼主2024/3/6 18:29
#include<bits/stdc++.h>
using namespace std;
const int N=1.2e5+4;
#define inf 2147483647
#define pii pair<int,int>
struct Edge{
	int to,value;
}; 
vector<Edge>G[N];
int ans[N],minn;
bool vis[N];
priority_queue<pii,vector<pii>,greater<pii> >Q;

int n,m,k,u,v,w;
int s,t;
void add(int u,int v,int w){
	G[u].push_back({v,w});
}
int main(){
    cin>>n>>m>>k>>s>>t;
	while(m--){
		cin>>u>>v>>w;
		add(u,v,w);
		add(v,u,w);
		for(int i=1;i<=k;i++){
			add(u+i*n,v+i*n,w);
			add(v+i*n,u+i*n,w);
			add(u+i*n-n,v+i*n,0);
			add(v+u*n-n,u+i*n,0);
			/*
			u=0,v=1;
			连1和6,连1和5 
			*/
		}
	}	
	for(int i=0;i<=(k+1)*n;i++){
		if(i!=s){
			ans[i]=inf; 
		}
	}
	Q.push({ans[s],s});
	while(!Q.empty()){
		int u=Q.top().second;Q.pop();
		if(vis[u]){
			continue;
		}
		vis[u]=1;
		for(int i=0;i<G[u].size();i++){
			int v=G[u][i].to,w=G[u][i].value;
			if(ans[v]>ans[u]+w){
				ans[v]=ans[u]+w;
				Q.push({ans[v],v});
			}
		}
	}
	minn=inf;
	for(int i=0;i<=k;i++){
		minn=min(minn,ans[t+i*n]);
	}
	cout<<minn;
	return 0;
}
2024/3/6 18:29
加载中...