Luogu_P1613跑路
题目大意
题目中要求的是从1号点到n号点所需要的最短时间, 一秒可以走 \(2^k\) 个距离
给定的有向图的边边权都是1.
问题分析
由于一秒可以走 \(2^k\) 个距离,因此题目转化为寻找两个点之间的距离为\(2^k\)的点对,并把边权(代表时间)赋值为1, 由于给定边权(指路径长度)都是1,
因此我们可以采用dp的思想,长度为\(2^K\)的路径可以由两个\(2^{k-1}\)的路径组合而成,至于为什么不考虑其他的组合方式,原因是初始边权都为1,如果能由其他组合方式组合而成,那么一定可以由两个\(2^{k-1}\)的路径组合而成.所以我们只需要先求出所有距离为\(2^k\)的点对,并把他们两个的时间边权赋值为1然后求最短路即可.
AC_CODE
#include <cstring>
#include <iostream>
const int N = 55;
int n, m, dist[N][N], dis[N];
bool g[N][N][64], st[N];
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0);
std::cin >> n >> m;
memset(dist, 0x3f, sizeof dist);
memset(dis, 0x3f, sizeof dis);
while(m --) {
int a, b;
std::cin >> a >> b;
dist[a][b] = 1;
g[a][b][0] = true;
}
for(int k = 1; k <= 64; k ++ )
for(int i = 1; i <= n; i ++ )
for(int t = 1; t <= n; t ++ )
for(int j = 1; j <= n; j ++ ) {
if(g[i][t][k - 1] && g[t][j][k - 1]) {
g[i][j][k] = true;
dist[i][j] = 1;
}
}
dis[1] = 0;
for(int i = 0; i < n; i ++ ) {
int t = 0;
for(int j = 1; j <= n; j ++ )
if(!st[j] && (!t || dis[j] < dis[t]))
t = j;
st[t] = true;
for(int j = 1; j <= n; j ++ )
dis[j] = std::min(dis[j], dis[t] + dist[t][j]);
}
std::cout << dis[n];
return 0;
}
Luogu_P1613跑路的更多相关文章
- [題解]luogu_P1613跑路(最短路/倍增)
首先要知道不能跑最短路,因為只有整2^k才能一秒到達,和倍增有關 所以我們想知道任意兩點間能否存在一條2^k長度的路徑,數據很小,可以考慮floyd 把倍增和floyd結合起來考慮發現如果i到k,k到 ...
- TM4C123G红外触摸屏:开发板好不容易实现了原理,放到专家设计的板子上无法运行,于是专家跑路项目黄了
使用TI的TM4C123G LaunchPad开发板,USB接口,来对同样的芯片进行烧写. 我们只用烧写那一块功能,不用另外一个芯片的开发功能,需要跳线 源码项目: 从官方网站TM4C123G ...
- 估值十亿美元、1.5亿用户,公司CEO却跑路了
转载这篇文章是觉得配图非常好玩的,文章的真实性有待证明 年收益3600万美元的.曾经拥有高口碑产品的Evernote,却正在把一手好牌打烂,距离IPO越来越远,屡屡被业界唱衰. "独角兽公司 ...
- 洛谷P1613 跑路
P1613 跑路 176通过 539提交 题目提供者该用户不存在 标签倍增动态规划 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 这个题的数据.. 题意问题 表意 题目描述 小A的工作不仅繁 ...
- 编程从入门到提高,然后放弃再跑路(Java)
1.Java入门篇 1.1 基础入门和面向对象 1.1.1 编程基础 [01] Java语言的基本认识 [02] 类和对象 [03] 类的结构和创建对象 [04] 包和访问权限修饰符 [05] 利用p ...
- Luogu1613 跑路
题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的空间跑路器,每秒钟 ...
- 干货,不小心执行了rm -f,除了跑路,如何恢复?
前言 每当我们在生产环境服务器上执行rm命令时,总是提心吊胆的,因为一不小心执行了误删,然后就要准备跑路了,毕竟人不是机器,更何况机器也有bug,呵呵. 那么如果真的删除了不该删除的文件,比如数据库. ...
- 理解Linux文档的默认安全机制、隐藏属性、特殊权限,妈妈在也不用担心你从删库到跑路!!!
写在前面 前面的章节 详解Linux文档属性.拥有者.群组.权限.差异,介绍了文档的基本权限,包括读写执行(r,w,x),还有文档若干的属性,包括是否为目录(d).文件(-).链接文件(l).拥有者. ...
- Oracle删库跑路
--10g R2 startup mount exclusive restrict; alter system enable restricted session; drop database; -- ...
随机推荐
- C. Tourist's Notes
C. Tourist's Notes time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Pikachu漏洞练习-SQL-inject(持续更新)
本来在bup中repeater模式可以多次测试,但不知为何总是出错 这里把我们想查询的数据库和版本进行联合查询,放包,页面回显数据库名称和版本分别为pikachu,5.7.26 数据库版本大于5那么i ...
- 涛思数据 TDengine集群搭建
一.准备 1.设置主机名 hostnamectl set-hostname a.com hostnamectl set-hostname b.com hostnamectl set-hostname ...
- [error]Flask Address already in use
在Python的Flask框架下Address already in use [地址已在使用中] 出现这种错误提示, 说明你已经有一个流程绑定到默认端口(5000).如果您之前已经运行过相同的模块,则 ...
- [C++]高效C/C ++编程tips
Effective C++ 视C++ 为一个语言联邦(C.Object-Oriented C++.Template C++.STL) 宁可以编译器替换预处理器(尽量以const.enum.inline ...
- Arm64架构下编译便携Python
这段时间,我一直忙于将 Rainbond 源码构建模块移植到 Arm64/aarch64 架构中.对于 Python 项目而言,可以直接通过源代码编译成为可运行在各种容器平台之上的容器镜像.这个过程不 ...
- javaScript系列 [27]- DOM
本文将详细介绍DOM相关的知识点,包括但不限于Document文档结构.Node节点.Node节点的类型.Node节点的关系以及DOM的基本操作( 节点的获取.节点的创建.节点的插入.节点的克隆和删除 ...
- 网络划分和各层协议以及webservice 浅谈
最近在公司做一些和其他外部系统接口调用的工作,遇到一些网络传输的问题,趁周末的时间记录.整理一下. 提到网络我们不得不提网络的分层架构: 我们通常听到 网络七层架构/五层架构/四层架构,但是不了解很容 ...
- 编写Java程序,实现字符串统计和处理
返回本章节 返回作业目录 需求说明: 在控制台输入纯字符的字符串,输出当前字符串的长度. 统计出该字符串中出现相同字母次数最多的字母(不考虑不同字母出现次数相同的情况). 将出现最多次数的字母字母替换 ...
- Java基础周测题,获取用户从控制台输入的年份,判断是否是闰年
需求说明: 获取用户从控制台输入的年份,判断是否是闰年: 是闰年: 是平年: 实现代码: import java.util.Scanner; public class test { public st ...