快速幂模板/洛谷P1226【模板】快速幂

news/2024/9/20 16:54:58/文章来源:https://www.cnblogs.com/src1024/p/18422802

​本题是CSP-J组的第四题。

题意:
给出一个有向图,当前在 1号点,初始在时间 0,必须在 k的倍数的时间出发,且到终点的时间也必须是 k 的倍数。

每条边有一个边权 ,只有在当前时间 ≥时才可以通过,且不能在原地不动,即每一个时间点必须走一条边。

问从 11 号点出发到 nn 号时最早的时刻。(没有方案则输出 −1−1)

思路:
因为 k≤100k≤100 很小,所以我们可以从 k入手。

注意到,如果我当前到达了 u号点,且当前时间为 p,这条边边权为 w,如果 p<wp<w,那么显然当前不能通过。

但是因为如果当前可以走到这个点,那么可以晚一些 kk 的倍数的时间出发,依然可以走到这个点,则我们可以在入口处等待一些时间,使得可以通过这条边,等待时间为,即等待 个k 的倍数,这样就可以通过这条边了,耗费时间为。

现在通过每条边的时间更出发点为 k的倍数有关系,则我们可以建立以下状态:定义 为到达 i号点的时间modk 的值为 j时的最短消耗时间。

那么答案显然是。

然后看一下转移,如果 p≥w了,那么可以直接通过,则 ——>。

否则的话,令,即我们在入口处等待一些时间,使得可以走到这条边,转移为 ——>min(,p+1)。

可以运用 dijkstra 算法的思想来进行转移,每次去堆顶选取耗时最短的那个点,然后逐层松弛。

时间复杂度为:O(n×klog⁡n)。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 10010, M = 105;
inline ll read() {ll x = 0, f = 1;char c = getchar();while (c < '0' || c>'9') {if (c == '-')f = -1;c = getchar();}while (c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return x * f;
}
inline void write(ll x) {if (x < 0) {putchar('-');x = -x;}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
ll n, m, k;
ll dis[N][M];
bool f[N][M];
vector<pair<ll, ll>> E[N];
priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, greater<pair<ll, ll>>> q;
void add(ll u, ll v, ll w) {E[u].push_back({ v,w });
}
void dijkstra(ll s) {dis[s][0] = 0;q.push({ 0,s });while (!q.empty()) {ll u = q.top().second, p = q.top().first;q.pop();if (f[u][p % k])continue;f[u][p % k] = 1;for (auto d : E[u]) {ll v = d.first, w = d.second, t = (p + 1) % k;if (p >= w)t = p;elset = ((w - p + k - 1) / k) * k + p;if (dis[v][(t + 1) % k] > t + 1) {dis[v][(t + 1) % k] = t + 1;q.push({ t + 1,v });}}}
}
int main() {memset(dis, 0x3f, sizeof(dis));n = read(), m = read(), k = read();for (int u, v, w, i = 0; i < m; i++) {u = read(), v = read(), w = read();add(u, v, w);}dijkstra(1);if (!f[n][0])puts("-1");elsewrite(dis[n][0]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/800597.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Swagger】3.Swagger2的权限控制

想找Swagger的登录认证方式。这里是Swagger2的方式。登录安全控制 Basic身份认证 ApiKey身份认证登录安全控制 Basic身份认证ApiKey身份认证 有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。

Oracle 19C重启库后警告日志报错ORA-12012ORA-27476: SYS.MAX_JOB_SLAVE_PROCESSES does not exist

Oracle 19C重启库后警告日志报错ORA-12012&&ORA-27476: "SYS"."MAX_JOB_SLAVE_PROCESSES" does not exist某次测试机器的19c重启后突然在警告日志定时冒出如下类似的报错:2024-09-20T15:20:00.170202+08:00 TESTDB(7):Errors in file /u01/app/or…

【Swagger】2.不在生产环境暴露,可以修改默认地址

不对外暴露接口 一般来说,接口给内部人员使用和测试的,不对生产环境暴露。此时应该如何设置呢?可以在Swagger配置文件中添加注解:@Profile({"环境名称1","环境名称2"} 或@Profile("环境名称") 这里,注解中不添加生产环境。 此时,开发环境和…

SMT丨工艺特点及详细生产工艺流程

SMT丨工艺特点及详细生产工艺流程 表面组装技术SMT现状 SMT是目前电子组装行业里最流行的一种技术和工艺。自70年代初推向市场以来,SMT已逐渐替代传统"人工插件"的波峰焊组装方式,已成为现代电子组装产业的主流,人们称为电子组装技术的第二次革命。在国际上,这种…

【Swagger】2.——不在生产环境暴露,可以修改默认地址

不对外暴露接口 一般来说,接口给内部人员使用和测试的,不对生产环境暴露。此时应该如何设置呢?可以在Swagger配置文件中添加注解:@Profile({"环境名称1","环境名称2"} 或@Profile("环境名称") 这里,注解中不添加生产环境。 此时,开发环境和…

文件上传漏洞思路详解

1. 文件上传漏洞简介 1.1 什么是文件上传漏洞 文件上传漏洞是一种常见的Web应用程序漏洞,攻击者可以通过向目标服务器上传恶意文件来实现攻击目的。这类漏洞的产生通常是因为服务器没有对用户上传的文件进行充分的安全检查和验证。 1.2 文件上传漏洞有哪些危害 1. 恶意代码执行…

信息学奥赛初赛天天练-93-CSP-S2023阅读程序3-sort排序、同底对数求和、二分查找、二分答案

2023 CSP-S 阅读程序2 判断题正确填 √,错误填 ⨉ ;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分) 01 #include <vector> 02 #include <algorithm> 03 #include <iostream> 04 05 using namespace std; 06 07 bool f0(vector<int> &a…

缓存

Django4中的缓存 详细文档参考:https://www.cnblogs.com/Neeo/articles/17589834.html Django支持的缓存有好几种:三方的Redis(推荐),Memcached(不推荐) 缓存到本地文件 缓存到本地数据库 缓存到内存里 虚拟缓存缓存的粒度 局部视图缓存 缓存指定的视图函数,有两种写法.在视…

VSCode 定义代码模板

在使用编写代码的过程中,经常会写一些固定代码段。 以 Java 为例,定义实体类时一般都会编写序列化版本号: @Serial private static final long serialVersionUID = 1L;这段代码是固定写法,基本不会变,如果每次都手写的话,就比较繁琐了。 VSCode 提供了生成代码段的功能,…

轻松部署!龙蜥操作系统安装Zabbix7.0详细教程

龙蜥操作系统(Anolis OS)作为龙蜥社区发行的开源Linux发行版,以其稳定、高性能、安全、可靠和100%兼容CentOS 8软件生态的特点,成为众多企业和开发者的首选操作系统。它不仅支持多计算架构,如X86、ARM、RISC-V等,还针对云端场景进行了优化,为云上典型场景带来显著的性能…

WPF 隐藏listview控件的滚动条

两种方式:需要自行验证,对控件,那个有效,那个没效对于不可控的事情,保持乐观; 对于可控的事情,保持谨慎

前端实现文件导出

在后台管理系统中,我们经常会遇到文件导出这个需求,下面,我将几种常见的导出方式做一个简单的介绍,让大家在以后遇到此类需求时,能够切合实际情况,采取相对合理的方式。 导出目标 文件地址已经存在服务器上的静态文件,比如用户上传的图片、材料等等。http://192.168.1.1…