洛谷4568: 飞行路线

题意:

  • 给定一张无向图有\(n\)个点编号为\(0\)到\(n-1\)。共有\(m\)条边,每条边有一个边权。
  • 可以选择\(k\)条边将边权改变为\(0\),给定起点和终点,问从起点到终点的路径的最小边权和为多少。

输入描述:

  • 第一行输入三个整数\(n,m,k\),分别表示点数,边数,\(k\)。
  • 第二行输入两个整数\(s,t\)表示起点和终点。
  • 接下来有\(m\)行,每行输入\(x,y,z\)表示从\(x\)到\(y\)有边权为\(z\)的边。
  • 数据范围
    • \(n\leq10^4,m\leq5*10^4,k\leq10,z\leq10^3\)

输出描述:

  • 输出一个整数表示答案。

思路:

  • 分层图模板题。
  • 以样例为例:

  • 建完图后跑最短路即可
  • 建完分层图后边数和点数的计算问题:
    • 点数: 每一层点有\(n\)个点,一共建立\(k\)层图,所以总点数为\(n*k\)。
    • 边数: 每一层图有\(m\)条边,那么总共有\(k*m\)条边,相邻两层相互连边有\(k-1\)个中间层,所以总边数为\(k*m\)条边。无向图开两倍即可。
  • 同时防止毒瘤数据,每层终点连边,解决在\(k\)还没用完时就到达终点的情况。
  • 所以这时候点数\(+n\),边数\(+m\)
  • \(Hint\): 这里的无向图双向连边是指一层内部双向连边,而层与层之间只能单向连边。

代码:

#include<bits/stdc++.h>
#define PII pair<int, int>
using namespace std; const int maxn = (1e4+10) * 11;
const int maxm = 1e6 + 10 + 5e4 + 10; int n, m, k, s, t; int head[maxn], ver[maxm<<1], nex[maxm<<1], edge[maxm<<1], tot;
inline void add_edge(int x, int y, int z){
ver[++tot] = y; edge[tot] = z;
nex[tot] = head[x]; head[x] = tot;
} int dist[maxn];
bool v[maxn];
void dijkstra()
{
memset(dist, 0x3f, sizeof(dist));
dist[s] = 0;
priority_queue<PII, vector<PII>, greater<PII> > q;
q.push({0, s});
while(q.size())
{
int x = q.top().second; q.pop();
if(v[x]) continue;
v[x] = 1;
for(int i = head[x]; i; i = nex[i])
{
int y = ver[i], z = edge[i];
if(dist[y] > dist[x] + z)
{
dist[y] = dist[x] + z;
q.push({dist[y], y});
}
} }
} int main()
{
scanf("%d%d%d%d%d", &n, &m, &k, &s, &t);
s++; t++;
for(int i = 1, x, y, z; i <= m; i++)
{
scanf("%d%d%d", &x, &y, &z); x++, y++;
add_edge(x, y, z); add_edge(y, x, z);
for(int j = 1; j <= k; j++)
{
//相互两层之间连边
add_edge(x+(j-1)*n, y+j*n, 0);
add_edge(y+(j-1)*n, x+j*n, 0);
//一层中内部连边
add_edge(x+j*n, y+j*n, z);
add_edge(y+j*n, x+j*n, z);
}
} //防止毒瘤数据, k次机会还没用完就到了终点
for(int i = 1; i <= k; i++)
add_edge(t+(i-1)*n, t+i*n, 0); //每层之间的终点连边
dijkstra();
cout << dist[t+k*n] << endl;
return 0;
}

luogu_4568: 飞行路线的更多相关文章

  1. BZOJ2763[JLOI2011]飞行路线 [分层图最短路]

    2763: [JLOI2011]飞行路线 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2523  Solved: 946[Submit][Statu ...

  2. 分层图+最短路算法 BZOJ 2763: [JLOI2011]飞行路线

    2763: [JLOI2011]飞行路线 Time Limit: 10 Sec  Memory Limit: 128 MB Description Alice和Bob现在要乘飞机旅行,他们选择了一家相 ...

  3. BZOJ 2763: [JLOI2011]飞行路线 最短路

    2763: [JLOI2011]飞行路线 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  4. poj 2763: [JLOI2011]飞行路线(spfa分层图最短路)

    2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2156 Solved: 818 [Submit][Statu ...

  5. Bzoj 2763: [JLOI2011]飞行路线 dijkstra,堆,最短路,分层图

    2763: [JLOI2011]飞行路线 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1728  Solved: 649[Submit][Statu ...

  6. Bzoj 2763: [JLOI2011]飞行路线 拆点,分层图,最短路,SPFA

    2763: [JLOI2011]飞行路线 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1694  Solved: 635[Submit][Statu ...

  7. [JLOI 2011]飞行路线&[USACO 09FEB]Revamping Trails

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

  8. [JLOI2011]飞行路线 不同的算法,不同的悲伤

    题目 :BZOJ2763 洛谷P4568 [JLOI2011]飞行路线 一道最短路的题目,想想写个题解也不错(好久没写题解了_(:з」∠)_) 然后这道题中心思路是dijikstra处理最短路,所以没 ...

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

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

随机推荐

  1. Java的常用API之Object类简介

    Object类 1.toString方法在我们直接使用输出语句输出对象的时候,其实通过该对象调用了其toString()方法. 2.equals方法方法摘要:类默认继承了Object类,所以可以使用O ...

  2. java运算符的优先级别

    一.运算符的优先级 运算符按照优先级别的高低排序分别是:自加/减运算符. 算术运算符.比较运算符.逻辑运算符.赋值运算符.具体请参考下表: 顺序 运算符 1. 括号,如 ( ) 和 [ ] 2. 一元 ...

  3. SQL Server SSIS中的变量使用表达式后,就无法更改其值了

    在SQL Server SSIS中,我们可以为变量定义初始值和表达式,其实SSIS的变量定义为表达式后我们就无法更改变量的值了,我们来做如下实验: 首先我们在SSIS包中定义一个String类型的变量 ...

  4. 端口排查步骤-7680端口分析-Dosvc服务

    出现大量7680端口的内网连接,百度未找到端口信息,需证明为系统服务,否则为蠕虫 1. 确认端口对应进程PID netstat -ano 7680端口对应pid:6128 2. 查找pid对应进程 t ...

  5. Windows环境:VMware下linux虚拟机与Windows主机进行文件共享的方法

    转载至:https://blog.csdn.net/kai1001/article/details/79668327 感谢原作者的分享 操作主要分两大步骤: 一.是对主机进行配置: 二.是在虚拟机上安 ...

  6. ASP.NET Core中使用Cache缓存

    ASP.NET Core中使用Cache缓存 缓存介绍: 通过减少生成内容所需的工作,缓存可以显著提高应用的性能和可伸缩性. 缓存对不经常更改的数据效果最佳. 缓存生成的数据副本的返回速度可以比从原始 ...

  7. python 使用Anaconda管理项目环境

    Pycharm没有内置的python解释器,需要我们自己下载python解释器. 在很多python项目中,会导入第三方的模块,逐个去下载导入很不方便. 我们通常使用Anaconda来管理python ...

  8. 025:为什么需要将Logger对象声明为private static final类型的

    本文阅读时间大约4分钟. 参考答案 就这个问题而言,我总结了三个原因: 设置为private是为了防止其他类使用当前类的日志对象: 设置为static是为了让每个类中的日志对象只生成一份,日志对象是属 ...

  9. 一款APP的完整开发流程 (转载)

    来源:https://www.sohu.com/a/239089829_100063940 近年来,在市场和政策的双轮驱动下,我国服务外包产业快速发展,服务智能化趋势显现.随着企业核心业务外包活动的日 ...

  10. ML-求解 SVM 的SMO 算法

    这算是我真正意义上认真去读的第一篇ML论文了, but, 我还是很多地方没有搞懂, 想想, 缓缓吧, 还是先熟练调用API 哈哈 原论文地址: https://www.microsoft.com/en ...