【洛谷P4568】飞行路线【分层图最短路】

洛谷 P4568 [JLOI2011] 飞行路线(分层图最短路) 分层图最短路 阅读详情

题目大意:

题目链接:https://www.luogu.org/problemnew/show/P4568
一张无向图,每条边有权值,可以选择不超过 k k k条路使这条路的权值变为0。求从 S S S到 T T T的最短路。


思路:

做这道题的原因:随机跳题 P a r t 3 Part3 Part3跳到了分层图最短路的题目 q w q qwq qwq
这道题算是分成图最短路的模板吧。
由于题目中说有 k k k条道路可以免费,所以直接跑最短路暴力判断显然是不行的。
分层图最短路就可以有效解决这种带有 「阶段性」的最短路。
我们把整个图分成 k + 1 k+1 k+1层( 0 ∼ k 0\sim k 0∼k),第 k k k层表示已经将 k k k条道路免费的图,也就是说,每一层的道路和普通的最短路没有什么区别,只是多了一些从第 i i i层到第 i + 1 i+1 i+1层的道路。这些道路的权值为0,这样就有效解决了免费的情况,因为如果最短路跑到了第 i i i层说明使 i i i条道路免费了。
最终把每一层的终点连向一个超级汇点,权值为0,最短路就是第0层源点到超级汇点的最短路。
这道题还把我 s p f a spfa spfa卡了,敲了个 d i j dij dij才过。


代码:

#include <queue>
#include <cstdio>
#include <cstring>
#define mp make_pair
using namespace std;

const int N=300010,M=3000100;
int n,m,k,S,T,T_,tot,head[N],dis[N];
bool vis[N];

struct edge
{
	int next,to,dis;
}e[M];

void add(int from,int to,int dis)
{
	e[++tot].to=to;
	e[tot].dis=dis;
	e[tot].next=head[from];
	head[from]=tot;
}

void dij()
{
	memset(dis,0x3f3f3f3f,sizeof(dis));
	priority_queue<pair<int,int> > q;
	q.push(mp(0,S));
	dis[S]=0;
    while (q.size())
    {
        int u=q.top().second,v;
        q.pop();
        if (vis[u]) continue;
        vis[u]=1;
        for (int i=head[u];~i;i=e[i].next)
        {
            v=e[i].to;
            if (dis[v]>dis[u]+e[i].dis)
            {
                dis[v]=dis[u]+e[i].dis;
                q.push(mp(-dis[v],v));
            }
        }
    }
}

int main()
{
	memset(head,-1,sizeof(head));
	scanf("%d%d%d%d%d",&n,&m,&k,&S,&T_);
	T=N-1; S++; T_++; k++;
	for (int i=1,x,y,z;i<=m;i++)
	{
		scanf("%d%d%d",&x,&y,&z);
		x++; y++;
		for (int i=1;i<=k;i++)
		{
			add(i*n-n+x,i*n-n+y,z);
			add(i*n-n+y,i*n-n+x,z);
			if (i<k)
			{
				add(i*n-n+x,i*n+y,0);
				add(i*n-n+y,i*n+x,0);
			}
		}
	}
	for (int i=1;i<=k;i++)
		add(i*n-n+T_,T,0);
	dij();
	printf("%d\n",dis[T]);
	return 0;
}
[图论]分层图最短路 ABC132 – E – Hopscotch Addict https://atcoder.jp/contests/abc132/tasks/abc132_e 分层图的思想很重要。 这题算比较简单的,因为每次都要走三步,我们假设每次只走一步,那么每个点就有三种状态:起点(终点)、走一步到达的点、走两步到达的点,那么我们把图分成三层,每走一步相当于往下一层图走,只有每三步到达的点才是最终停下来的点,连边的时候就连到下一层对应的点,这个方法同时也能很好的处理环的情况,建完图bfs一下就好了。 #include& 阅读详情

相关推荐

luogu P4568代码

洛谷P4568题解 其实就是个简单的NOIP..

【题解】【luogu2939】分层图最短路

分层图 分层图是针对于对图的边权有强制性修改的一类问题(修改次数较少); 它的思想其实就是拆点。 以上面这道题为例: 将k条边的权值变为0; 将原图建为k层每一个层内之间的边权不变,跨层的边权设为0; 这样就实现了分层图; 再在分层图上跑一边最短路就可以了; 代码如下: #include<bits/stdc++.h> using namespace std; const int ...

Zbw_OIer的博客 391

Android14 有线网络静态IP配置:从固件烧录到系统默认设置

本文详细解析了在Android14系统中,如何通过修改系统框架层和设置应用,为设备预设有线网络静态IP地址,实现固件烧录后即具备指定网络配置的功能。文章深入探讨了从扩展SettingsProvider数据库字段、配置默认值,到在设置应用中读取和应用配置的完整流程,旨在解决工业平板、智能终端等设备在无DHCP网络环境中批量部署的痛点,提升开箱即用体验。

lake5的博客 920

luoguP4568 [JLOI2011]飞行路线【分成图最短路】

[JLOI2011]飞行路线 link 题目大意: 这里引入一个新知识—分成图最短路; 分层图最短路是指在可以进行分层图的图上解决最短路问题。 一般模型是: 在图上,有k次机会可以直接通过一条边,问起点与终点之间的最短路径。 那我们考虑建图,我们将图分成0~k层这里就是将图分成k层, 每次从第i-1层到第i层相当于是走了一条免费的飞行路线。 然后如果从第i层回到第i-1层就是一个“后悔”的过程。 因此建图方法就是每层之间正常连边,层与层之间上到下边权为0, 下到上正常边权。这样直接跑Dijkstra

蒟蒻こんにゃく 306

SpringBoot Actuator未授权访问漏洞实战:从发现到利用

本文深入剖析了SpringBoot Actuator未授权访问漏洞的成因、危害与利用手法。文章详细演示了如何发现暴露的端点,并通过实战案例复现了从敏感信息泄露到利用反序列化漏洞实现远程代码执行(RCE)的全过程,为开发与运维人员提供了从漏洞发现到修复加固的完整安全指南。

weixin_29231221的博客 260

CVPR 2024 LaTeX 模板实战:从匿名提交到图表排版的避坑指南

本文详细解析CVPR 2024 LaTeX模板的使用技巧,涵盖匿名提交设置、pdfLaTeX编译器选择、图表排版优化等关键环节。通过实战案例演示智能引用、公式编号、三线表制作等专业技巧,帮助研究者高效完成论文格式规范,规避常见排版错误。特别针对双栏格式下的图片定位、跨栏表格等复杂场景提供解决方案。

weixin_42561040的博客 453

洛谷 P4568 [JLOI2011]飞行路线【分层图】

题目描述 https://www.luogu.org/problem/P4568 #include<iostream> #include<cstring> #include<cstdio> #include<queue> using namespace std; priority_queue< pair<int,int> > ...

ETwinner的博客 252

解决RocketMQ中@Bean配置DefaultMQProducer时的MQClientException问题

本文针对Spring Boot整合RocketMQ时,因在@Bean配置中手动调用DefaultMQProducer的start()方法而引发的MQClientException问题,深入剖析了其根本原因在于生命周期管理冲突。文章提供了简洁有效的解决方案——移除手动启动,让Spring容器自动管理,并给出了完整的配置示例与生产环境最佳实践。

rnn9storyteller的博客 688

图论学习笔记 - 分层图最短路问题(以飞行路线为例)

定义 分层图最短路是指在可以进行分层图的图上解决最短路问题。 分层图:可以理解为有多个平行的图。 一般模型是:在一个正常的图上可以进行 k 次决策,对于每次决策,不影响图的结构,只影响目前的状态或代价。一般将决策前的状态和决策后的状态之间连接一条权值为决策代价的边,表示付出该代价后就可以转换状态了。 简单说就是:在图上,有 k 次机会可以直接通过一条边,问起点与终点之间的最短路径。 有两种方法解决分层图最短路问题: 1、建图时直接建成 k+1 层 2、多开一维记录机会信息 具体选哪种依题目数据

haobowen的博客 1651

3D视觉-激光三角测量法的概述和原理

激光三角法位移测量的原理是,用一束激光以某一角度聚焦在被测物体表面,然后从另一角度对物体表面上的激光光斑进行成像,物体表面激光照射点的位置高度不同,所接受散射或反射光线的角度也不同,用。激光三角测量法是一种通过图像采集系统采集被测物表面漫反射的激光轮廓,进而基于设备已知的相对位置通过算法处理,获得被测物表面的三维轮廓数据,进而还原目标物体三维空间信息的方法。采用激光三角原理和回波分析原理进行非接触位置、位移测量的精密传感器, 广泛应用于位置、位移 、厚度、半径、形状、振动、距离等几何量的工业测量。

qq_20660115的博客 3921

图解B树的原理及操作

本文主要参考:https://blog.youkuaiyun.com/shenchaohao12321/article/details/83243314 1. B树 1.1 B树的定义 B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。 一颗m阶的B树定义如下: 1)每个结点最多有m-1个关键字。 2)根结点最少可以只有1个关键字。 3)非根结点至少有Math.ceil(m/2)-

jinking01的专栏 3万+

洛谷:P4568 [JLOI2011] 飞行路线

P4568 [JLOI2011] 飞行路线

qq_61935738的博客 482

Camera HAL 多线程管理详解

本文摘要:Camera HAL 采用双线程管理体系(CAMX与CHI-CDK)实现高效并发处理。CAMX ThreadManager负责HAL内部及框架交互,采用线程池+任务调度机制,将节点处理、回调等封装为Job异步执行;CHI ThreadManager专注于OEM定制逻辑,支持异步/同步两种作业模式。两套系统通过函数指针解耦但共享地址空间,共同实现硬件流水线的强实时性。文章详细解析了两者的类层次架构、核心数据结构及典型应用场景,并提供了问题排查的代码切入点,为Camera HAL开发与性能优化提供指导

DU_YULIN的博客 56

洛谷 P4568 [JLOI2011]飞行路线 分层图 最短路 dijkstra

题目链接: https://www.luogu.org/problem/P4568 同种类型题目: https://blog.youkuaiyun.com/aiwo1376301646/article/details/100691298 思路: 1:因为这道题目的思路和https://blog.youkuaiyun.com/aiwo1376301646/article/details/100691298一模一样...

aiwo1376301646的博客 291

基于 Simulink 的单相 PWM 整流器(四象限变流器)在高铁辅助电源系统中的建模与仿真实战教程

这是一份基于 Simulink 的实战教程。在高铁牵引供电与辅助电源系统中,单相 PWM 整流器(又称四象限变流器,4QC)是极其核心的“绿色电源”枢纽。传统的二极管整流器虽然结构简单,但会导致严重的输入电流畸变和低功率因数,对电网造成极大的谐波污染。而 PWM 整流器通过高频主动控制,不仅能将单相交流电转换为平稳的直流电,还能实现输入电流正弦化、单位功率因数(PF=1)运行,并支持能量双向流动(如列车再生制动时的能量回馈)。本教程将带你从数学模型出发,搭建一套高性能的电压电流双闭环控制系统。

amy_mhd的博客 47

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

洛谷P4568飞行路线(分层图最短路)

P4568飞行路线

Robin2321的博客 788

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

洛谷P4568 [JLOI2011]飞行路线(分层图最短路)

题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在nn个城市设有业务,设这些城市分别标记为00到n-1n−1,一共有mm种航线,每种航线连接两个城市,并且航线有一定的价格。 Alice和Bob现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。航空公司对他们这次旅行也推出优惠,他们可以免费在最多kk种航线上搭乘飞机。那么Alice和Bob这次...

ESTHERWXY的博客 441

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

洛谷P4568 [JLOI2011]飞行路线 (分层图最短路)

原题连接 题意 在m条航线中,可以选择k条路线免费,问从st到ed的最小花费是多少。 观察一下题目数据,n只有2e4而k只有10,因此n*(k+1)个点的时间复杂度也绰绰有余,这时就可以利用分层图的思想来写。 解题思路 将整个图想象成一个三维的立体空间,那么1到n个点排在第一层,n+1到2n的点排在第2层……依次类推,那么我们可以假设层与层之间的联系为免费的路线,每上一层相当于利用一次免费的机会,层之间当然是只上不下,因此如果有k次免费机会,那么就会有k+1层的图,最后答案肯定在每一层的st中找。 #i

kaka03200的博客 436

洛谷 - P4568 [JLOI2011]飞行路线(分层图最短路)

题目链接:点击查看 题目大意:给出一张图,每条边都有权值,现在要求从点st到达点ed,沿途中可以让k条边的边权免费,现在求最短路 题目分析:分层图经典模板问题,直接套板子就行了,最后记得对于数组d的每一项中找出最小值作为答案 代码: #include<iostream> #include<cstdlib> #include<string> #inclu...

Falcon的博客 445

洛谷 P4568 [JLOI2011]飞行路线(分层图最短路)

很容易理解的一个算法,只要把图画出来看看就行,感觉也很实用。 #include<cstdio> #include<stdlib.h> #include<algorithm> #include<iostream> #include<string> #include<cstring> #include<map> #include<vector> #include<queue> #include<ma

weixin_44070289的博客 233

洛谷 P4568 [JLOI2011]飞行路线(分层图+最短路变形)

初学分层图,写写模板题。 个人感觉分层图大部分会应用在最短路上,主要体现为题目会要求将图中的一些边的边权进行改变。比如选择kkk条边不计算其贡献等等。这类题目的解题方法大部分都是在原先的djdjdj最短路算法上再增加几维状态,就像把这个图分为了好几层,每一层都由当前层或前一层的状态转移而来。 (以上纯属菜鸡理解,大佬勿喷) 题解: 因为要选择几条边不计贡献,那么我们就再增加一维状态,dis[i][j]dis[i][j]dis[i][j]表示达到点 iii 时,已经选择了 jjj 条边不计入贡献的最短路。那.

the best 的博客 312

分层图最短路

分层最短路 洛谷P4568飞行路线 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格。 Alice和Bob现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。航空公司对他们这次旅行也推出优惠,他们可以免费在最多k种航线上搭乘飞机。那么Alice和Bob这次出行最少花费多少? 输入描述: 数据的第一行有三个整数,n,m,k,分别表示城市数,航线数和免

Melancholy的博客 367

【算法日记】Day 1 分层图最短路

**Abstract**:`#最短路` `#Dijkstra` `#分层图`

2302_79029575的博客 342
上一篇: 【洛谷P3554】LUK-Triumphal arch【树形dp】【二分】
下一篇: 随机挑战总结 Part3
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值