社区讨论

91pts RE求调

P4568[JLOI2011] 飞行路线参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mknxn0si
此快照首次捕获于
2026/01/21 19:21
4 周前
此快照最后确认于
2026/01/22 13:44
4 周前
查看原帖
第3个点,可能是卡常了?
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define fi first
#define se second

const int maxn=10005;
const int inf=0x3f3f3f3f3f3f3f3f;

signed main(){
	int n,m,k,s,t;
	cin>>n>>m>>k>>s>>t;
	
	vector<pii> g[maxn*10];
	
	for(int i=0;i<m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		for(int j=0;j<=k;j++){
			g[u+j*n].push_back(make_pair(w,v+j*n));
			g[v+j*n].push_back(make_pair(w,u+j*n));
		}
		for(int j=0;j<k;j++){
			g[u+j*n].push_back(make_pair(0,v+(j+1)*n));
			g[v+j*n].push_back(make_pair(0,u+(j+1)*n));
		}
	}
	
		
	int dis[maxn*10];
	memset(dis,0x3f,sizeof(dis));
	dis[s]=0;
	priority_queue<pii,vector<pii>,greater<pii> > q;
	q.push(make_pair(0,s));
	
	while(!q.empty()){
		int x=q.top().se;
		int curd=q.top().fi;
		q.pop();
		if(curd>dis[x])continue;
		
		for(auto nx:g[x]){
			int to=nx.se;
			int cost=nx.fi;
			if(dis[to]>dis[x]+cost){
				dis[to]=dis[x]+cost;
				q.push(make_pair(dis[to],to));
			}
		}
	}
	
	int ans=inf;
	for(int i=0;i<=k;i++){
		ans=min(ans,dis[t+i*n]);
	}
	cout<<ans;
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...