BZOJ:2763-[JLOI2011]飞行路线(最短路分层图)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2763
解题心得:
- 第一次见到分层最短路。其实题中说选择k条路径免费,那怎么选k条路径并没有一个明确的选法,就只能遍历。分层图就是一个图分成k层,每个节点可以走当前层的相邻节点,费用为cost,但是也可以走下一层的相邻节点,费用为0,因为只有k层,所以从第0层的S到达第k层的T也就走了k个免费路径。这个时候K不能太大,不然容易MLE。
#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
typedef long long ll;
const int maxn = 5e5+;
const ll INF = 1e12; ll n, m, k, S, T; struct edge {
ll to, len; edge(ll to1, ll len1):
to(to1), len(len1){};
}; struct NODE {//记录队列中节点的位置,层数,花费
ll len, pos, c; bool friend operator < (NODE a, NODE b) {
return a.len > b.len;
} NODE (ll len1, ll pos1, ll c1):
len(len1), pos(pos1), c(c1){};
}; vector <edge> ve[maxn]; ll dis[][maxn]; void add_edge(ll u, ll v, ll len) {//注意是双向边
ve[u].push_back(edge(v, len));
ve[v].push_back(edge(u, len));
} void init() {
for(int i=;i<;i++)
for(int j=;j<maxn;j++)
dis[i][j] = INF; scanf("%lld%lld%lld",&n,&m,&k);
scanf("%lld%lld",&S, &T);
for(int i=;i<m;i++) {
ll u, v, len;
scanf("%lld%lld%lld",&u, &v, &len);
add_edge(u, v, len);
}
} void dij() {//用dij不容易被卡网格图
priority_queue <NODE> qu;
qu.push(NODE(, S, ));
dis[][S] = ;
while(!qu.empty()) {
NODE now = qu.top(); qu.pop();
ll u = now.pos;
for(int i=;i<ve[u].size();i++) {//走当前层
ll v = ve[u][i].to;
ll len = ve[u][i].len;
ll c = now.c;
if(dis[c][v] > dis[c][u]+len) {
dis[c][v] = dis[c][u] + len;
qu.push(NODE(dis[c][v], v, c));
}
} ll c = now.c;
if(c < k) {//走下一层
for (int i = ; i < ve[u].size(); i++) {
ll v = ve[u][i].to;
if(dis[c+][v] > dis[c][u]) {//花费为0
dis[c+][v] = dis[c][u];
qu.push(NODE(dis[c][u], v, c+));
}
}
}
}
} void min_path() {
dij();
ll Min = INF;
for(int i=;i<=k;i++) {
Min = min(Min, dis[i][T]);
}
printf("%lld\n", Min);
} int main() {
init();
min_path();
}
BZOJ:2763-[JLOI2011]飞行路线(最短路分层图)的更多相关文章
- Bzoj 2763: [JLOI2011]飞行路线 拆点,分层图,最短路,SPFA
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1694 Solved: 635[Submit][Statu ...
- BZOJ 2763: [JLOI2011]飞行路线 最短路
2763: [JLOI2011]飞行路线 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- 分层图+最短路算法 BZOJ 2763: [JLOI2011]飞行路线
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MB Description Alice和Bob现在要乘飞机旅行,他们选择了一家相 ...
- Bzoj 2763: [JLOI2011]飞行路线 dijkstra,堆,最短路,分层图
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1728 Solved: 649[Submit][Statu ...
- bzoj 2763: [JLOI2011]飞行路线 -- 分层图最短路
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MB Description Alice和Bob现在要乘飞机旅行,他们选择了一家相 ...
- BZOJ 2763: [JLOI2011]飞行路线 【分层图模板】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2763 2763: [JLOI2011]飞行路线 Time Limit: 10 Sec M ...
- bzoj 2763 [JLOI2011]飞行路线——分层图
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2763 分层图两种方法的练习. 1.把图分成k+1层,本层去上面一层的边免费.但空间时间都不算 ...
- bzoj 2763: [JLOI2011]飞行路线【分层图+spfa】
为什么早年的题总是从0开始标号啊--又zz了一次WA 分层图的题只有这一个套路吧,建分层图,然后优化时间是分层跑spfa然后层与层之间单独跑即可 #include<iostream> #i ...
- bzoj 2763: [JLOI2011]飞行路线
#include<cstdio> #include<cstring> #include<iostream> #include<queue> #defin ...
- bzoj 2763: [JLOI2011]飞行路线 分层图
题目链接 n个点m条路, 每条路有权值, 给出起点和终点, 求一条路使得权值最小.可以使路过的路中, k条路的权值忽略. 其实就是多一维, 具体看代码 #include<bits/stdc++ ...
随机推荐
- SNMP协议详解
简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议.在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案:由于SNMP的简单性,在Inter ...
- GPRS研究(3):NO CARRIER错误的含义解释
NO CARRIER(必须是大写)是一个由猫向其所附着的设备(典型的就是一个计算机)发来的文本响应信息,表示猫没有连接到远程系统.NO CARRIER是由Hayes指令集定义的,由于Hayes猫的普及 ...
- 记一种c++字符串格式化方法
std::string str_fmt(const char * _Format, ...) { std::string _str; va_list marker = NULL; va_start(m ...
- Task ‘run’ not found in root project
问题现象: Task 'run' not found in root project 'springframework'. 问题原因: 没有在gradle.build文件中添加如下配置, mainCl ...
- GPU CUDA之——深入理解threadIdx
http://blog.csdn.net/canhui_wang/article/details/51730264 摘要 本文主要讲述CUDA的threadIdx. 1. Grid,Block和Thr ...
- hdu1113 Word Amalgamation(详解--map和string的运用)
版权声明:本文为博主原创文章.未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/35338617 转载请注明出 ...
- 汇编试验一:查看CPU和内存,用机器码指令和汇编指令编程
预备知识: r命令查看,改变CPU寄存器的内容 2.D命令查看内存 3.E命令改写内存 两种方式: 1: 2: 内存中写入机器码 用T命令执行机器码(先将CS:IP指向要执行的内存处) 用a命令写汇编 ...
- 使用npm uninstall卸载express无效
最近在看<node.js开发指南>学习node.js,因为书是2012年的书,对应的各种软件.包的版本就特别老,其中第五章用到express,书中版本用的是2.X版本,而我这边通过npm ...
- 安全清理Xcode 缓存垃圾
安全清理Xcode缓存垃圾方法: 经验证,Xcode缓存垃圾存储在~/Library/Developer/Xcode/DerivedData/路径下,缓存和Xcode的版本有关(如同一台Mac安装2个 ...
- Entity Freamwork CodeFirst 连接PostgreSql数据库
EF的Code First是一个比较强大也比较有用的功能,他可以让你先写代码,最后根据代码去生成数据库,非常符合OO设计的要求,抛开数据库层面不管(当然不是完全的不管),只管对象的设计. 首先,说一下 ...