飞行路线

题目链接

今天上午模拟考试考了原题,然而数组开小了,爆了4个点。

据王♂强dalao说这是一道分层图SPFA的裸题

dis[i][j]表示到点i用k个医疗包的最小消耗,dis[u][j]+e[i].w更新dis[v][j],

dis[u][j]更新dis[v][j+1]

然而它卡SPFA,会TLE几个点

于是就有了堆优化SPFA。。(它就是堆优化dijkstra。。)

#include<cstring>
#include<cstdio>
#include<queue>
#define INF 0x3f3f3f3f
#define N 10010
int n,m,k,s,t,ans=INF;
int dis[N][];
struct HA{
int pos,cost,times;
};
struct cmp{
bool operator()(HA x,HA y){
return x.cost==y.cost?x.times>y.times:x.cost>y.cost;
}
};
std::priority_queue< HA, std::vector<HA>, cmp > q;
bool vis[N][];
int Head[N],num;
struct NODE{
int to,w,next;
} e[];
const int ch_top=4e7+;
char ch[ch_top],*now_r=ch-,*now_w=ch-;
inline int read(){
while(*++now_r<'');
register int x=*now_r-'';
while(*++now_r>='')x=x*+*now_r-'';
return x;
}
inline void write(int x){
static char st[];static int top;
while(st[++top]=''+x%,x/=);
while(*++now_w=st[top],--top);
*++now_w='\n';
}
void SPFA(){
memset(dis,0x3f,sizeof(dis));
for(int i=;i<=k;i++){
dis[s][i]=;
q.push((HA){s,,i});
}
while(!q.empty()){
int u=q.top().pos,f=q.top().times;
q.pop();
vis[u][f]=;
for(int i=Head[u];i;i=e[i].next){
int v=e[i].to;
if(dis[v][f]>dis[u][f]+e[i].w){
dis[v][f]=dis[u][f]+e[i].w;
if(!vis[v][f]){
vis[v][f]=;
q.push(HA{v,dis[v][f],f});
}
}
if(f<k&&dis[v][f+]>dis[u][f]){
dis[v][f+]=dis[u][f];
if(!vis[v][f+]){
vis[v][f+]=;
q.push(HA{v,dis[v][f+],f+});
}
}
}
}
}
int main()
{
fread(ch,,ch_top,stdin);
n=read(); m=read(); k=read();
s=read(); t=read();
int x,y,w;
for(int i=;i<=m;i++){
x=read(); y=read(); w=read();
e[++num].to=y;
e[num].w=w;
e[num].next=Head[x];
Head[x]=num;
e[++num].to=x;
e[num].w=w;
e[num].next=Head[y];
Head[y]=num;
}
SPFA();
write(dis[t][k]);
fwrite(ch,,now_w-ch,stdout);
return ;
}

【洛谷P4568】[JLOI2011]飞行路线的更多相关文章

  1. 洛谷 P4568 [JLOI2011]飞行路线 解题报告

    P4568 [JLOI2011]飞行路线 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在\(n\)个城市设有业务,设这些城市分别标记为0到\(n−1\ ...

  2. 洛谷 P4568 [JLOI2011]飞行路线 题解

    P4568 [JLOI2011]飞行路线 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在\(n\)个城市设有业务,设这些城市分别标记为\(0\)到\( ...

  3. 洛谷 P4568 [JLOI2011]飞行路线

    题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的 ...

  4. [洛谷P4568][JLOI2011]飞行路线

    题目大意:最短路,可以有$k$条边无费用 题解:分层图最短路,建成$k$层,层与层之间的边费用为$0$ 卡点:空间计算出错,建边写错 C++ Code: #include <cstdio> ...

  5. 洛谷 4568 [JLOI2011] 飞行路线

    题目戳这里 一句话题意: 有n个点,m条边的有向图,最多可以把k条边变为0,求从起点到终点最短距离. Solution 首先看到这题目,感觉贼难,看起来像DP,貌似也有大佬这么做,但鉴于本蒟蒻思维能力 ...

  6. 【洛谷 P4568】 [JLOI2011]飞行路线 (分层最短路)

    题目链接 分层图最短路. 把每个点拆成\(k+1\)个点,表示总共有\(k+1\)层. 然后每层正常连边, 若\((u,v)\)有边,则把每一层的\(u\)和下一层的\(v\).每一层的\(v\)和下 ...

  7. 洛谷P4568 飞行路线

    题目描述 \(Alice\)和\(Bob\)现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在\(n\)个城市设有业务,设这些城市分别标记为\(0\)到\(n−1\),一共有\(m\ ...

  8. 【luogu P4568 [JLOI2011]飞行路线】 题解

    题目链接:https://www.luogu.org/problemnew/show/P4568 卡了一晚上,算是分层图最短路的模板.注意卡SPFA,所以我写了个SLF优化. 同时 AC400祭!~ ...

  9. luogu P4568 [JLOI2011]飞行路线

    传送门 看到免费次数\(k\)最多只有10,可以考虑构建\(k+1\)层的分层图,即每一层正常连边,上下两层对应点连边权为0的单向边,最后对所有层里面的\(di_t\)取\(\max\)救星了 #in ...

随机推荐

  1. (转)python strip()函数 去空格\n\r\t函数的用法

    原文:http://www.cnblogs.com/zdz8207/p/python_learn_note_20.html python3.4学习笔记(二十) python strip()函数 去空格 ...

  2. Oracle 基础系列之1.3 用户管理

    一.概述 1.当我们使用sysdba创建一个新用户时,该用户是没有任何权限的,甚至连登录数据库的权限都没有,代码如下: 这里使用sysdba创建了一个用户名为'zc'的新用户,接着输入代码进行登录 e ...

  3. 现学现卖】IntelliJ+EmmyLua 开发调试Unity中Xlua

    http://blog.csdn.net/u010019717/article/details/77510066?ref=myread http://blog.csdn.NET/u010019717 ...

  4. NDK编译不同架构的参数

    随着Android的蓬勃发展, CPU的架构也越来越多. 早期只支持ARMv5, 截至目前, 支持的架构已达三类七种: ARM(ARMv5,ARMv7 (从2010年起),ARMv8), x86(x8 ...

  5. [转]Debugging into .NET Core源代码的两种方式

    本文转自:http://www.cnblogs.com/maxzhang1985/p/6015719.html 阅读目录 一.前言 二.符号服务器 三.项目中添加ASP.NET Core源代码 四.写 ...

  6. 系统更新后vs2012无法打开方案资源管理器

    系统更新后vs2012无法打开方案资源管理器 vs调试报错: 未找到与约束 ContractName Microsoft.VisualStudio.Language.Intellisense.IGly ...

  7. python高阶函数sorted

    原文 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因 ...

  8. PHP基础--两个数组相加

    在PHP中,当两个数组相加时,会把第二个数组的取值添加到第一个数组上,同时覆盖掉下标相同的值: <?php $a = array("a" => "apple& ...

  9. AE常用代码(标注要素、AE中画带箭头的线、如何获得投影坐标、参考坐标、投影方式、FeatureCount注意事项)

    手上的电脑已经用了将近三年了,想入手一台Surface Pro,所以计划着把电脑上的资料整理下,部分资料打算发到博客上来,资料有同事.也有自己的.也有来自网络的,来源途径太多,也没法详细注明,请见谅! ...

  10. Centos7安装JDK1.8 Linux64bit

    流程一览: 1.下载JDK1.8(jdk-8u11-linux-x64.tar.gz) 2. 解压缩安装 3.配置JAVA_HOME环境变量 4.切换JDK1.8为当前使用的JDK 5.重启,查看安装 ...