luogu_4568: 飞行路线
洛谷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: 飞行路线的更多相关文章
- BZOJ2763[JLOI2011]飞行路线 [分层图最短路]
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2523 Solved: 946[Submit][Statu ...
- 分层图+最短路算法 BZOJ 2763: [JLOI2011]飞行路线
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MB Description Alice和Bob现在要乘飞机旅行,他们选择了一家相 ...
- BZOJ 2763: [JLOI2011]飞行路线 最短路
2763: [JLOI2011]飞行路线 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- poj 2763: [JLOI2011]飞行路线(spfa分层图最短路)
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2156 Solved: 818 [Submit][Statu ...
- Bzoj 2763: [JLOI2011]飞行路线 dijkstra,堆,最短路,分层图
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1728 Solved: 649[Submit][Statu ...
- Bzoj 2763: [JLOI2011]飞行路线 拆点,分层图,最短路,SPFA
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1694 Solved: 635[Submit][Statu ...
- [JLOI 2011]飞行路线&[USACO 09FEB]Revamping Trails
Description Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并 ...
- [JLOI2011]飞行路线 不同的算法,不同的悲伤
题目 :BZOJ2763 洛谷P4568 [JLOI2011]飞行路线 一道最短路的题目,想想写个题解也不错(好久没写题解了_(:з」∠)_) 然后这道题中心思路是dijikstra处理最短路,所以没 ...
- 洛谷 P4568 [JLOI2011]飞行路线 解题报告
P4568 [JLOI2011]飞行路线 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在\(n\)个城市设有业务,设这些城市分别标记为0到\(n−1\ ...
随机推荐
- 离线方式快速安装python模块以及相关依赖模块
一般公司的服务器都是和外网隔离的,这个如果没有内部pip源的话,想要安装python的模块就需要去python官网一个一个下载依赖模块的包,然后逐个安装,这样做非常耗时间. 我们今天用的办法就是现在我 ...
- 【题解】Luogu P5327 [ZJOI2019]语言
原题传送门 看到这种树上统计点对个数的题一般是线段树合并,这题也不出意外 先对这棵树进行树剖,对于每次普及语言,在\(x,y\)两点的线段树上的\(x,y\)两位置打\(+1\)标记,在点\(fa[l ...
- TestNG系列(四)TestNG监听器
前言 监听器实际上是一些预定义的java接口,用户创建这些接口的实现类(即implements某监听接口,并实现里面的方法),并加入到testng中,testng便会在运行的不同时刻调用这些类中你自定 ...
- FileUpload上传多张照片
<asp:FileUpload ID="uploaderInput" runat="server" multiple="multiple&quo ...
- vant-ui rem问题
使用vant-ui时rem单位问题 vue-cli3.x项目引入vant-ui1.6.21,要求在项目中使用rem单位,但vant是px的.故,需要添加一个自动转换插件和一段修改html根元素的fon ...
- Python pip安装第三方库的国内镜像
Windows系统下,一般情况下使用pip在DOS界面安装python第三方库时,经常会遇到超时的问题,导致第三方库无法顺利安装,此时就需要国内镜像源的帮助了. 使用方法如下: 例如:pip inst ...
- Beego 学习笔记13:Api编写
Api编写 1> api常用的数据的格式有json和xml这两种. 2> 下面开始讲解不同的数据格式使用的方式 1->JSON 数据直接输出. 调用 ServeJSO ...
- php + h5 实现socket推送技术
在socket出现之前已经有ajax定时请求.长轮询等方案,但都不能满足需求,socket就应用而生了. socket基本函数socket 总结下常用的socket函数 服务端: socket_cre ...
- linux磁盘空间满了 但是没有大文件
很常见的一个问题 linux磁盘空间满了 但是没有大文件 解决思路: 1.用df 检查发现/根目录可用空间为0 [root@/]#df -h 2.用du检查发现各目录占用的空间都很少,有约3G的空间莫 ...
- SQL注入流程图
http://127.0.0.1/sqli-labs-master/Less-2/index.php? id=1 1 输入单引号 ‘ 进行检验是否存在输入 http://12 ...