社区讨论

64pts RE#3#4#7#8 求助

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

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@lo1yghzk
此快照首次捕获于
2023/10/23 05:02
2 年前
此快照最后确认于
2023/11/03 05:28
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;
struct note{
	int v,next,l;
}e[4000006];
int dis[4000006];
int vis[4000006];
int head[4000006],wk = 1;
void add(int u,int v,int l){
	e[wk].l = l;
	e[wk].v =v;
	e[wk].next = head[u];
	head[u] = wk++;
}
int n,m,k,s,t;
struct node{
	int dis,u;
	bool operator<(const node&a) const{
		return dis>a.dis;
	}
};
priority_queue<node>pq;

void dij(){
	for(int i = 0;i<=n;i++){
		vis[i] = 0;
		dis[i] = 0x7f7f7f7f;
	}
	//cout<<"??";
	dis[s] = 0;
	pq.push((node){0,s});
	while(!pq.empty()){
	//	cout<<"??";
		int u = pq.top().u;pq.pop();
		if(vis[u])continue;
		vis[u]= 1;
		for(int i = head[u];i!=0;i = e[i].next){
//			cout<<"??";
			int v = e[i].v;
			if(dis[v]>dis[u]+e[i].l){
				dis[v] = dis[u]+e[i].l;
				pq.push((node){dis[v],v}); 
			}
		}
	}
}
signed main(){
	cin>>n>>m>>k>>s>>t;
	for(int i = 1;i<=m;i++){
		int a,b,c;
		scanf("%lld%lld%lld",&a,&b,&c);
		add(a,b,c);
		add(b,a,c);
		for(int j = 1;j<=k;j++){
			int pa,pb;
			pa = a+j*n;
			pb = b+j*n;
			add(pa,pb,c);
			add(pb,pa,c);
			add(pa-n,pb,0); 
			add(pb-n,pa,0);
		}
	}
	for(int i =1;i<=n;i++){
		add(t+(i-1)*n,t+i*n,0);
	}
	n*=(k+1);
	dij();
	n/=(k+1); 
	cout<<dis[t+n*k]<<endl;
//	for(int i =1;i<=n;i++){
//		cout<<i<<" "<<dis[i]<<endl;
//	} 
	return 0;
}
帮帮孩子吧QWQ

回复

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

正在加载回复...