ACM-ICPC 2018 南京赛区网络预赛 L 【分层图最短路】
<题目链接>
题目大意:
有N个城市,这些城市之间有M条有向边,每条边有权值,能够选择K条边 边权置为0,求1到N的最短距离。
解题分析:
分层图最短路模板题,将该图看成 K+1 层图,然后具体解析见代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
#define INF 0x7ffffffffff;
;
;
typedef long long ll;
int n,m,k,tot,cnt;
int head[M];
];
struct EDGE{
int to;
int next;
ll val;
}edge[M<<];
struct NODE{
int loc,cal; //loc代表该点的标号,cal代表该点所在的层数,这两个变量可以确定分层图中所有点的位置
ll dist;
bool operator <(const NODE &tmp)const{
return dist>tmp.dist;
}
NODE(,,ll w=){
loc=a,cal=b,dist=w;
}
}d[N][];
void init(){
cnt=;
memset(head,-,sizeof(head));
}
void add(int u,int v,int w){
edge[++cnt].to=v,edge[cnt].val=w;
edge[cnt].next=head[u],head[u]=cnt;
}
void dij(){
memset(vis,false,sizeof(vis));
;i<=n;i++){
;j<=k;j++){
d[i][j].dist=INF; //将所有点到起点的距离初始化为无穷大
}
}
d[][].dist=;
priority_queue<NODE>q;
q.push(NODE(,,d[][].dist));
while(!q.empty()){
NODE now=q.top();
q.pop();
int tmp1=now.loc,tmp2=now.cal;
if(vis[tmp1][tmp2])continue;
vis[tmp1][tmp2]=true;
for(int i=head[tmp1];~i;i=edge[i].next){
int v=edge[i].to;
ll cost=edge[i].val;
if(d[v][tmp2].dist>d[tmp1][tmp2].dist+cost){ //在同一层中进行普通的松弛操作,表示当前道路的权值不用置为0
d[v][tmp2].dist=d[tmp1][tmp2].dist+cost;
q.push(NODE(v,tmp2,d[v][tmp2].dist));
}
<=k&&d[v][tmp2+].dist>d[tmp1][tmp2].dist){ //没有加上cost,代表 tmp1-->v 这段路的权值置为0
d[v][tmp2+].dist=d[tmp1][tmp2].dist;
q.push(NODE(v,tmp2+,d[v][tmp2+].dist));
}
}
}
}
int main(){
int T;scanf("%d",&T);
while(T--){
init();
scanf("%d%d%d",&n,&m,&k);
;i<=m;i++){
int u,v;ll w;
scanf("%d%d%lld",&u,&v,&w);
add(u,v,w);
}
dij();
ll mn=INF;
;i<=k;i++){ //在所有层中选取最短的情况
mn=min(mn,d[n][i].dist);
}
printf("%lld\n",mn);
}
;
}
2018-09-12
ACM-ICPC 2018 南京赛区网络预赛 L 【分层图最短路】的更多相关文章
- ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze
262144K There are NN cities in the country, and MM directional roads from uu to v(1\le u, v\le n)v ...
- ACM-ICPC 2018 南京赛区网络预赛 L题(分层最短路)
题目链接:https://nanti.jisuanke.com/t/31001 题目大意:给出一个含有n个点m条边的带权有向图,求1号顶点到n号顶点的最短路,可以使<=k条任意边的权值变为0. ...
- ACM-ICPC 2018 南京赛区网络预赛 L题(分层图,堆优化)
题目链接: https://nanti.jisuanke.com/t/31001 超时代码: #include<bits/stdc++.h> using namespace std; # ...
- ACM-ICPC 2018 南京赛区网络预赛 L.Magical Girl Haze(分层最短路)
There are N cities in the country, and M directional roads from u to v(1≤u,v≤n). Every road has a di ...
- ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze 最短路+分层图
类似题解 There are NN cities in the country, and MM directional roads from uu to v(1\le u, v\le n)v(1≤u, ...
- ACM-ICPC 2018 南京赛区网络预赛 - L Magical Girl Haze (分层迪杰斯特拉)
题意:N个点,M条带权有向边,求可以免费K条边权值的情况下,从点1到点N的最短路. 分析:K<=10,用dist[i][j]表示从源点出发到点i,免费j条边的最小花费.在迪杰斯特拉的dfs过程中 ...
- ACM-ICPC 2018 南京赛区网络预赛 L && BZOJ 2763 分层最短路
https://nanti.jisuanke.com/t/31001 题意 可以把k条边的权值变为0,求s到t的最短路 解析 分层最短路 我们建立k+1层图 层与层之间边权为0,i 向 i+1层转 ...
- 【ACM-ICPC 2018 南京赛区网络预赛 L】Magical Girl Haze
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 定义dis[i][j]表示到达i这个点. 用掉了j次去除边的机会的最短路. dis[1][0]= 0; 在写松弛条件的时候. 如果用 ...
- ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze (分层dijkstra)
There are NN cities in the country, and MMdirectional roads from uu to v(1\le u, v\le n)v(1≤u,v≤n). ...
随机推荐
- day 13 装饰器
装饰器基础 装饰器的目的是为了给被装饰 对象,增加新功能,或者说增加某种能力 在程序中工具就是函数 如此一来,装饰器指的就是一个函数,被装饰着也是一个函数 总结;装饰器就是用一个函数去拓展另外一个已存 ...
- C++ 解析Json——jsoncpp(转)
原文:https://www.cnblogs.com/liaocheng/p/4243731.html JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和 ...
- hashlib、logging模块
hashlib模块 hashlib提供了常见的摘要算法,如md5和sha1等等. 那么什么是摘要算法呢?摘要算法又称为哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通 ...
- Linux 编程笔记(三)
上一章节对文件的基本属性做了一个笔记,续上次笔记对Linux文件的属性和属性组做一笔记 我安装的是虚拟机操作系统的版本还KaliLinux但是系统启动速度拖延,所以刚开始还是配置Centos 1.Li ...
- Java基本语法(一)
一.标识符 (1)标识符就是在编写程序时给类,变量,方法等起的名字 (2)标识符的命名规则:标识符由字母,数字,下划线和$组成;第一个字符不能是数字;不能与关键字重名 二.关键字 定义:也称保留字,是 ...
- fdisk命令
fdisk -l命令详解 Disk /dev/sda: 53.7 GB, 53687091200 bytes 块设备名称为/dev/sda,此设备的大小为53.7GB,这个数字不是特别精确,我系统是5 ...
- python面向对象三大特性-多态
import abc #利用abc模块实现抽象类 class All_file(metaclass=abc.ABCMeta): all_type='file' @abc.abstractmethod ...
- 常见的爬虫分析库(4)-爬虫之PyQuery
PyQuery 是 Python 仿照 jQuery 的严格实现.语法与 jQuery 几乎完全相同. 官方文档:http://pyquery.readthedocs.io/ 安装 1 pip ins ...
- asp.net core ioc 依赖注入
1.生命周期 内置的IOC有三种生命周期: Transient: Transient服务在每次被请求时都会被创建.这种生命周期比较适用于轻量级的无状态服务. Scoped: Scoped生命周期的服务 ...
- Senparc.Weixin微信开发(1) 开发验证
官方系列教程 http://www.cnblogs.com/szw/archive/2013/05/20/3089479.html 登录微信公众平台后-左侧找到开发--启用服务器配置 这样,我们才可以 ...