飞行路线(BZOJ 2763)
题目描述
输入
输出
样例输入
0 4
0 1 5
1 2 5
2 3 5
3 4 5
2 3 3
0 2 100
样例输出
提示
对于30%的数据,2<=n<=50,1<=m<=300,k=0;
对于50%的数据,2<=n<=600,1<=m<=6000,0<=k<=1;
对于100%的数据,2<=n<=10000,1<=m<=50000,0<=k<=10.
/*
分层图最短路
建k+1层图,对于每条边都和它下一层图建一条边权为0的边,
然后进行优先队列优化的Dij
*/
#include<cstdio>
#include<iostream>
#include<queue>
#include<vector>
#include<cstring>
#define mk make_pair
#define pa pair<int,int>
#define M 2000010
using namespace std;
int n,m,k,s,t,num,head[M],dis[M],c[M];
int x[M],y[M],z[M],ans=0xfffffff;
priority_queue<pa,vector<pa>,greater<pa> >q;
bool f[M];
struct node
{
int u,v,pre,t;
};node e[M];
void add(int x,int y,int z)
{
for(int i=head[x];i;i=e[i].pre)
if(e[i].v==y)
{
e[i].t=min(e[i].t,z);
return;
}
num++;
e[num].u=x;
e[num].v=y;
e[num].t=z;
e[num].pre=head[x];
head[x]=num;
}
void Dij(int x)
{
memset(dis,/,sizeof(dis));
dis[x]=;q.push(mk(,x));
while(!q.empty())
{
int d=q.top().first;
int k=q.top().second;
q.pop();
if(f[k])continue;f[k]=;
for(int i=head[k];i;i=e[i].pre)
{
int v=e[i].v;
if(dis[v]>dis[k]+e[i].t)
{
dis[v]=dis[k]+e[i].t;
q.push(mk(dis[v],v));
}
}
}
}
int main()
{
scanf("%d%d%d%d%d",&n,&m,&k,&s,&t);
s++;t++;n=n*(k+);
for(int i=;i<=m;i++)
scanf("%d%d%d",&x[i],&y[i],&z[i]),
x[i]++,y[i]++;
for(int i=;i<=m;i++)
for(int j=;j<=k+;j++)
{
add((x[i]-)*(k+)+j,(y[i]-)*(k+)+j,z[i]);
add((y[i]-)*(k+)+j,(x[i]-)*(k+)+j,z[i]);
if(j<=k)
{
add((x[i]-)*(k+)+j,(y[i]-)*(k+)+j+,);
add((y[i]-)*(k+)+j,(x[i]-)*(k+)+j+,);
}
}
Dij((s-)*(k+)+);
for(int j=;j<=k+;j++)
ans=min(ans,dis[(t-)*(k+)+j]);
printf("%d",ans);
return ;
}
飞行路线(BZOJ 2763)的更多相关文章
- ACM-ICPC 2018 南京赛区网络预赛 L && BZOJ 2763 分层最短路
https://nanti.jisuanke.com/t/31001 题意 可以把k条边的权值变为0,求s到t的最短路 解析 分层最短路 我们建立k+1层图 层与层之间边权为0,i 向 i+1层转 ...
- 分层图+最短路算法 BZOJ 2763: [JLOI2011]飞行路线
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MB Description Alice和Bob现在要乘飞机旅行,他们选择了一家相 ...
- BZOJ 2763: [JLOI2011]飞行路线 最短路
2763: [JLOI2011]飞行路线 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- Bzoj 2763: [JLOI2011]飞行路线 dijkstra,堆,最短路,分层图
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1728 Solved: 649[Submit][Statu ...
- Bzoj 2763: [JLOI2011]飞行路线 拆点,分层图,最短路,SPFA
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1694 Solved: 635[Submit][Statu ...
- [BZOJ 2763][JLOI 2011] 飞行路线
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3203 Solved: 1223[Submit][Stat ...
- bzoj 2763: [JLOI2011]飞行路线 -- 分层图最短路
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MB Description Alice和Bob现在要乘飞机旅行,他们选择了一家相 ...
- BZOJ 2763: [JLOI2011]飞行路线 【分层图模板】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2763 2763: [JLOI2011]飞行路线 Time Limit: 10 Sec M ...
- BZOJ 2763: [JLOI2011]飞行路线 spfa dp
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2763 题解: d[x][kk]表示从s到x用了kk次免费机会的最少花费. 代码: #in ...
- BZOJ 2763 飞行路线 BFS分层
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2763 题目大意: Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司 ...
随机推荐
- 猩球StarBall ,一个方便约球的小程序
扫描小程序码直接进入小程序 猩球StarBall 是一款为热爱运动的人群提供便利的小程序. 开发技术为Java +Mysql 其中用到的技术框架为SpringBoot,Mybatis,Redis,Qu ...
- P3368 【模板】树状数组 2 单点查询与区间修改
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...
- UML建模图实战笔记
一.前言 UML:Unified Modeling Language(统一建模语言),使用UML进行建模的作用有哪些: 可以更好的理解问题 可以及早的发现错误或者被遗漏的点 可以更加方便的进行组员之间 ...
- iOS开发之cell位置contentOffset的用法
@property(nonatomic) CGPoint contentOffset; // default ...
- 深入解析Web Services
SOA,面向服务器建构,是一款架构,这几年虽然没前几年那么流行,但是还是有很多企业在用,而Web Services是目前适合做SOA的主要技术之一,通过使用Web Services,应用程序可以对外发 ...
- 洛谷 P2894 [USACO08FEB]酒店Hotel
题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a ...
- MessageBox的使用
一 函数原型及参数 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer; hWnd:对话框父窗口 ...
- JavaSE-26 Swing
学习要点 关于Swing Swing容器组件 Swing布局管理器 Swing组件 Swing菜单组件 关于Swing Swing和AWT都是java开发图形用户界面的工具包. AWT:早期Java版 ...
- centos7 install vim8
centos7 install vim8 Git and dependency Git: https://github.com/vim/vim # yum install -y perl-devel ...
- es6(三set和map数据结构)
es6中提供了一个新的数据结构Set,他有点类似数组,但和数组不同的是,在里面你如果写入重复的值的话,他不会显示重复值. const s =new Set(); [2,3,4,5,6,6,6,7,8, ...