P4568 [JLOI2011]飞行路线 P2939 [USACO09FEB]改造路Revamping Trails
分层图最短路系列题目
分层图最短路的题目有一个非常容易看得出的把戏:让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相关推荐
- 洛谷 P2939 [USACO09FEB]改造路Revamping Trails
洛谷 P2939 [USACO09FEB]改造路Revamping Trails Description 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到 ...
- 洛谷P2939 [USACO09FEB]改造路Revamping Trails(最短路)
题目描述 Farmer John dutifully checks on the cows every day. He traverses some of the M (1 <= M <= ...
- [USACO09FEB]改造路Revamping Trails 分层最短路 Dijkstra BZOJ 1579
题意翻译 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 ...
- P4568 [JLOI2011]飞行路线
P4568 [JLOI2011]飞行路线 Description Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1 ...
- 洛谷P4568 [JLOI2011] 飞行路线 题解
洛谷P4568 [JLOI2011] 飞行路线 题解 题目链接:P4568 [JLOI2011] 飞行路线 题意: Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公 ...
- 洛谷 P4568 [JLOI2011] 飞行路线(分层图最短路)
[JLOI2011] 飞行路线 题目描述 Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在 n n n 个城市设有业务,设这些城市分别标记为 0 0 0 到 ...
- 洛谷 - P4568 [JLOI2011]飞行路线(分层图最短路)
题目链接:点击查看 题目大意:给出一张图,每条边都有权值,现在要求从点st到达点ed,沿途中可以让k条边的边权免费,现在求最短路 题目分析:分层图经典模板问题,直接套板子就行了,最后记得对于数组d的每 ...
- [JLOI 2011]飞行路线[USACO 09FEB]Revamping Trails
Description Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并 ...
- bzoj2763 [JLOI2011]飞行路线
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3216 Solved: 1230 [Submit][St ...
最新文章
- 037_Unicode对照表三
- sdut2772 KMP的简单应用
- Mysql字符集之utf8和utf8mb4的使用问题
- 福州java培训哪里好_福州自学考试培训班哪里比较好
- 找回消失的ubuntu启动选项
- 微软系统修复工具(试用版)
- java1.5以后新增的特性_jdk1.5之后的一些新特性
- 美团点评成中国第三大互联网公司!
- 每天生成 45 亿字符的 GPT-3,真能取代人工?
- 重复代码检查工具simian的基本用法
- w10 桌面计算机垃圾桶,解答win10我的电脑怎么放在桌面
- 腾讯云服务器芯片,腾讯云星星海重磅发布首款自研GPU服务器 占据业界几宗“最”...
- 安搭Share:2020年前三季度,金融部门杠杆率保持稳定
- Albumentation使用指南
- uniapp打开外部链接
- python使用RSA加密算法
- JAVA流浪猫狗救助平台
- Origin:以太坊上的58同城
- 《文献管理与信息分析》课程笔记
- 本轮大宗商品涨价:(背后原因分析)2021-09