【学习笔记/题解】分层图/[JLOI2011]飞行路线
\(\text{Solution:}\)
关于分层图:
一般用于处理:给你\(k\)次机会对边权进行修改的最短路问题。
算法流程:
建立出\(k\)层图,对应进行\(k\)次操作后的局面。
不同图之间建立边,即表示从当前局面进行一次操作转移到下一个局面。
由分层对图的边和点较多,所以开空间的时候一定要精确计算,避免空间爆炸和运行时错误。
对于本题:
这题的操作就是把一条边的边权改为\(0\).于是,类似地,我们建立\(k\)层图,并对每一条边向下一层连边,构造出分层图跑即可。
关于边数:\(E=(4k+2)*m\)约为\(2.1*10^6.\)于是我们直接把边开到\(2.5*10^6\)即可。
对于点的空间不必要开这么大,只是笔者没有改而已……
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2.5e6+10;
int head[MAXN],tot,n,m,dis[MAXN];
struct E{int nxt,to,dis;}e[MAXN];
int vis[MAXN],k,S,T,ans;
inline void add(int x,int y,int w){e[++tot]=(E){head[x],y,w};head[x]=tot;}
struct Q{
int dis,pos;
bool operator<(const Q&x)const{
return x.dis<dis;
}
};
priority_queue<Q>q;
void dijkstra(int s){
memset(dis,0x3f3f3f3f,sizeof dis);
dis[s]=0;q.push((Q){dis[s],s});
while(!q.empty()){
Q tmp=q.top();q.pop();
int x=tmp.pos;
if(vis[x])continue;
vis[x]=1;
for(int i=head[x];i;i=e[i].nxt){
int j=e[i].to;
if(dis[j]>dis[x]+e[i].dis){
dis[j]=dis[x]+e[i].dis;
if(!vis[j])q.push((Q){dis[j],j});
}
}
}
}
int main(){
scanf("%d%d%d",&n,&m,&k);
scanf("%d%d",&S,&T);
for(int i=1;i<=m;++i){
int u,v,c;
scanf("%d%d%d",&u,&v,&c);
add(u,v,c);add(v,u,c);
for(int j=1;j<=k;++j){
add(u+(j-1)*n,v+j*n,0);
add(v+(j-1)*n,u+j*n,0);
add(u+j*n,v+j*n,c);
add(v+j*n,u+j*n,c);
}
}
dijkstra(S);ans=(1<<30);
for(int i=0;i<=k;++i)ans=min(ans,dis[T+i*n]);
printf("%d\n",ans);
return 0;
}
【学习笔记/题解】分层图/[JLOI2011]飞行路线的更多相关文章
- GIS案例学习笔记-ArcGIS整图大图出图实例教程
GIS案例学习笔记-ArcGIS整图大图出图实例教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 1. 通过出图比例尺(1:2000),地图范围测算图纸大小. 图 ...
- UML学习笔记:类图
UML学习笔记:类图 有些问题,不去解决,就永远都是问题! 类图 类图(Class Diagrame)是描述类.接口以及它们之间关系的图,用来显示系统中各个类的静态结构. 类图包含2种元素:类.接口, ...
- UML学习笔记:活动图
UML学习笔记:活动图 活动图 活动图是UML中描述系统动态行为的图之一,用于展现参与行为的类的活动或动作.在UML里,活动图很类似于流程图,但是有一些区别: 活动图着重表现系统行为,描述对象活动的顺 ...
- 题解 P4568 【[JLOI2011]飞行路线】
P4568 [JLOI2011]飞行路线 分层图模板题,相似的题还有P4822 [BJWC2012]冻结,P2939 [USACO09FEB]改造路Revamping Trails,其实做惯了也就不难 ...
- JS学习笔记--轮播图效果
希望通过自己的学习收获哪怕收获一点点,进步一点点都是值得的,加油吧!!! 本章知识点:index this for if else 下边我分享下通过老师教的方式写的轮播图,基础知识实现: 1.css代 ...
- 吴恩达deepLearning.ai循环神经网络RNN学习笔记_看图就懂了!!!(理论篇)
前言 目录: RNN提出的背景 - 一个问题 - 为什么不用标准神经网络 - RNN模型怎么解决这个问题 - RNN模型适用的数据特征 - RNN几种类型 RNN模型结构 - RNN block - ...
- 【jqGrid for ASP.NET MVC Documentation】.学习笔记.6.分层
1 两级分层 每个父 grid 的行,都能有子 grid .这被叫做 层次,它用来显示相关的 表,主信息 –> 明细信息等. } 一旦你为 父子 grid 都定义了 Models ,下一步就是设 ...
- C#学习笔记思维导图 一本书22张图
阅读的书是<21天学通C#>博客中有下载 看看总结之后的模块 全部文件 初步展示 数据存储 继承模块 暂时就这些吧 全部思维导图22张打包下载
- DDD学习笔记1——分层架构
新旧架构对比图: DDD中的基础设施层包括数据持久化(ORM数据访问),IoC容器实现,AOP实现(安全,日志记录,缓存等) Repository的接口通常放在领域层,具体实现在基础设施层 旧架构的业 ...
随机推荐
- Java8 ParallelStream
ParallelStream 并行流就是一个把内容拆分成多个数据块,用不同线程分别处理每个数据块的流.对收集源调用parallelStream方法就能将集合转换为并行流. 并行流 并行流和顺序流转换 ...
- Mysql执行计划(大章)
Mysql的执行计划 执行计划是啥? 使用explain关键字可以模拟优化器执行SQL查询语句,从而知道Mysql是如何处理你的SQL语句的.分析你的查询语句或者表结构的性能瓶颈 语法 explain ...
- Spring security OAuth2.0认证授权学习第三天(认证流程)
本来之前打算把第三天写基于Session认证授权的,但是后来视屏看完后感觉意义不大,而且内容简单,就不单独写成文章了; 简单说一下吧,就是通过Servlet的SessionApi 通过实现拦截器的前置 ...
- 20190923-05Linux用户组管理命令 000 013
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理.不同Linux 系统对用户组的规定有所不同, 如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建. 用户组的 ...
- docker打包项目
nginx镜像制作实战 docker容器的主业 docker理念里,容器启动时,应当为它指定主业是什么,如nginx容器主业就是nginx代理服务,tomcat容器就是web服务等等 1.容器创建时, ...
- 【NOIP2013模拟】黑魔法师之门
题目描述 经过了16个工作日的紧张忙碌,未来的人类终于收集到了足够的能源.然而在与Violet星球的战争中,由于Z副官的愚蠢,地球的领袖applepi被邪恶的黑魔法师Vani囚禁在了Violet星球. ...
- 利用预编译解决C/C++重复定义的错误 -2020.09.13
利用预编译解决C/C++重复定义的错误 -2020.09.13 我们现在有main.c和function.h两个文件 main.c #include <stdio.h> #include ...
- python之Lambda
Python 匿名函数lambda lambda表达式在“:”后只能有一个表达式.也就是说,在def中,用return可以返回的也可以放在lambda后面,不能用return返回的也不能定义在py ...
- ASP.NET Core 配置与获取
目录 1,来自字典 2,来自配置文件 3,层次结构 4,映射 ASP.NET Core 中,可以使用 ConfigurationBuilder 对象来构建. 主要分为三部:配置数据源 -> Co ...
- Linux实战(13):Centos8 同步时间
前言 以下操作是通过ntpdate命令实现同步 timedatectl set-timezone Asia/Shanghai # 设置时区 rpm -ivh http://mirrors.wlnmp. ...