社区讨论
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 条回复,欢迎继续交流。
正在加载回复...