分层图最短路系列题目

分层图最短路的题目有一个非常容易看得出的把戏:让k条边免费。

对于能让\(k\)条边免费的数据,我们开\(k+1\)层图。每一层图内部正常连点,不同的是前一层的图的起点连一条权值为0的边到下一层的终点,等价于这条边免费了。

当然,这么建图的话这个图是挺大的。所以跑最短路的效率就特别重要!

还有最重要的一句话:

\(\huge{SPFA她死了!}\)

绝对不要用SPFA,除非题目真的有负权边。

建图什么的应该难不倒你,做过网络流的都差不多知道怎么处理下标的关系了。

在实现的过程中要注意:层数一定要注意是\(k+1\)层,不要数组开小了RE了啊!

代码:

#include<cstdio>
#include<cstring>
#include<queue>
const int maxn = 10005, maxk = 11;
struct Edges
{int next, to, weight;
} e[3000005];
int head[maxn * maxk], tot;
int dist[maxn * maxk];
int n, m, k, s, t;
struct HeapNodes
{int d, u;bool operator < (const HeapNodes &rhs) const{return d > rhs.d;}
};
void link(int u, int v, int w)
{e[++tot] = (Edges){head[u], v, w};head[u] = tot;
}
int dijkstra(int ss, int tt)
{memset(dist, 0x3f, sizeof dist);std::priority_queue<HeapNodes> heap;dist[ss] = 0;heap.push((HeapNodes){dist[ss], ss});while(!heap.empty()){HeapNodes x = heap.top(); heap.pop();int d = x.d, u = x.u;if(d != dist[u]) continue;for(int i = head[u]; i; i = e[i].next){int v = e[i].to;if(dist[u] + e[i].weight < dist[v]){dist[v] = dist[u] + e[i].weight;heap.push((HeapNodes){dist[v], v});}}}return dist[tt];
}
int main()
{scanf("%d%d%d%d%d", &n, &m, &k, &s, &t);for(int i = 1; i <= m; i++){int x, y, z; scanf("%d%d%d", &x, &y, &z);link(x, y, z); link(y, x, z);// 我总共会有k+1层for(int j = 1; j <= k; j++)// 第j层向j+1层连边{// 向j + 1层连边link(x + j * n, y + j * n, z);link(y + j * n, x + j * n, z);link(x + (j - 1) * n, y + j * n, 0);link(y + (j - 1) * n, x + j * n, 0);}}printf("%d\n", dijkstra(s, t + k * n));return 0;
}

转载于:https://www.cnblogs.com/Garen-Wang/p/9886114.html

P4568 [JLOI2011]飞行路线 P2939 [USACO09FEB]改造路Revamping Trails相关推荐

  1. 洛谷 P2939 [USACO09FEB]改造路Revamping Trails

    洛谷 P2939 [USACO09FEB]改造路Revamping Trails Description 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到 ...

  2. 洛谷P2939 [USACO09FEB]改造路Revamping Trails(最短路)

    题目描述 Farmer John dutifully checks on the cows every day. He traverses some of the M (1 <= M <= ...

  3. [USACO09FEB]改造路Revamping Trails 分层最短路 Dijkstra BZOJ 1579

    题意翻译 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 ...

  4. P4568 [JLOI2011]飞行路线

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

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

    洛谷P4568 [JLOI2011] 飞行路线 题解 题目链接:P4568 [JLOI2011] 飞行路线 题意: Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公 ...

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

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

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

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

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

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

  9. bzoj2763 [JLOI2011]飞行路线

    2763: [JLOI2011]飞行路线 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3216  Solved: 1230 [Submit][St ...

最新文章

  1. 037_Unicode对照表三
  2. sdut2772 KMP的简单应用
  3. Mysql字符集之utf8和utf8mb4的使用问题
  4. 福州java培训哪里好_福州自学考试培训班哪里比较好
  5. 找回消失的ubuntu启动选项
  6. 微软系统修复工具(试用版)
  7. java1.5以后新增的特性_jdk1.5之后的一些新特性
  8. 美团点评成中国第三大互联网公司!
  9. 每天生成 45 亿字符的 GPT-3,真能取代人工?
  10. 重复代码检查工具simian的基本用法
  11. w10 桌面计算机垃圾桶,解答win10我的电脑怎么放在桌面
  12. 腾讯云服务器芯片,腾讯云星星海重磅发布首款自研GPU服务器 占据业界几宗“最”...
  13. 安搭Share:2020年前三季度,金融部门杠杆率保持稳定
  14. Albumentation使用指南
  15. uniapp打开外部链接
  16. python使用RSA加密算法
  17. JAVA流浪猫狗救助平台
  18. Origin:以太坊上的58同城
  19. 《文献管理与信息分析》课程笔记
  20. 本轮大宗商品涨价:(背后原因分析)2021-09

热门文章

  1. 为什么文件名要小写?
  2. Coursera课程Python for everyone:chapter4
  3. LibSVM 在matlab中的使用
  4. Hadoop教程(三):HDFS、MapReduce、程序入门实践
  5. 四大发明之活字印刷——面向对象思想的胜利
  6. Java并发机制底层实现原理-volatile
  7. CSS内容溢出时,显示省略号
  8. java排序的几种方法
  9. SQL2005对字符串进行MD5加密
  10. 我的地盘听我的....