题目大意:

给定一张n个点m条边的带权有向图,每条边的边权只可能是1,2,3中的一种。将所有可能的路径按路径长度排序,请输出第k小的路径的长度,注意路径不一定是简单路径,即可以重复走同一个点。
无自环,可能有重边。
1<=n<=40,1<=m<=1000,1<=k<=10^18

分析:

将一个点拆成三个,然后将所有的边权拆成1,然后可以做矩阵乘法
为了方便计算我们加入一个计数点0,并且0向自己连个自环
那么矩阵的x次幂时的∑i=0n(ai,0−1)\sum_{i=0}^{n}(a_{i,0}-1)∑i=0n​(ai,0​−1)就是长度&lt;=x&lt;=x<=x时的方案数
那么我们可预处理出矩阵的2i2^i2i次幂时的方案数
然后去优化答案的统计
O(n3∗65+n3log2k)O(n^3*65+n^3log_2k)O(n3∗65+n3log2​k)

代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <queue>
#include <vector>
#include <cstring>
#include <algorithm>#define rep(i, st, ed) for (int i = st; i <= ed; i++)
#define rwp(i, ed, st) for (int i = ed; i >= st; i--)#define mt(x) memset(x, 0, sizeof(x))
#define mp(x, y) memcpy(x, y, sizeof(y))#define N 1005
#define M 45using namespace std;typedef long long ll;struct Matrix {ll a[M*3][M*3];
};
Matrix C[65], cc, cur, tmp;
int id[M][3], n, m, cnt, R;
ll K, ans, now;Matrix operator * (Matrix &aa, Matrix &bb) {mt(cc.a);rep(i, 0, 3 * n) rep(j, 0, 3 * n)rep(k, 0, 3 * n) cc.a[i][j] += aa.a[i][k] * bb.a[k][j];return cc;
}
bool check(Matrix &aa) {ll p = 0;rep(i, 1, n) {p += (aa.a[i][0] - 1);if (K <= p) return 1; }return 0;
}int main() {scanf("%d %d %lld", &n, &m, &K);rep(i, 1, n) C[0].a[i][0] = C[0].a[i][i + n] = C[0].a[i + n][i + 2 * n] = 1;int u, v, w;rep(i, 1, m) scanf("%d %d %d", &u, &v, &w), ++C[0].a[u + (w - 1) * n][v];C[0].a[0][0] = 1;int R = 1;for (R; R <= 66; R++) {if (R > 65)  { printf("-1\n"); return 0; }C[R] = C[R - 1] * C[R - 1];if (check(C[R])) break;}rep(i, 1, n) cur.a[i][i] = 1; for(R--; ~R; --R) {tmp = cur * C[R];if (!check(tmp)) cur = tmp , ans += (1ll << R);}printf("%lld\n", ans);return 0;
}

Luogu P3597 [POI2015]WYC___矩阵乘法快速幂+倍增相关推荐

  1. BZOJ 4386 Luogu P3597 [POI2015]Wycieczki (矩阵乘法)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4386 (luogu) https://www.luogu.org/pro ...

  2. 求解斐波那契第n项的几种解法(含矩阵乘法+快速幂) Python实现

    斐波那契数列 首先我们来定义一下斐波那契数列: f(n)={0n = 01n = 1f(n−1)+f(n−2)n > 1f(n)= \begin{cases} 0 & \text {n ...

  3. [矩阵乘法/快速幂专题]Arc of Dream,Recursive sequence,233 Matrix,Training little cats

    矩阵快速幂习题 复习矩阵乘法及快速幂模板 乘法模板 快速幂模板 T1:Arc of Dream 题目 题解 code T2:Recursive sequence 题目 题解 code T3:233 M ...

  4. ZCMU-1618-骨牌覆盖(矩阵乘法+快速幂)

    1618: 骨牌覆盖1 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 264  Solved: 124 [Submit][Status][Web Bo ...

  5. Xn数列(矩阵乘法+快速幂+慢速乘法)

    Xn数列 题目描述: 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输入描述: 一行 ...

  6. 【BZOJ 2323】 2323: [ZJOI2011]细胞 (DP+矩阵乘法+快速幂*)

    2323: [ZJOI2011]细胞 Description 2222年,人类在银河系外的某颗星球上发现了生命,并且携带了一个细胞回到了地球.经过反复研究,人类已经完全掌握了这类细胞的发展规律: 这种 ...

  7. bzoj4887: [Tjoi2017]可乐(矩阵乘法+快速幂)

    题目传送门 . 解法: 这种题都是矩阵乘法吧. f[i][t]表示第t秒在i的方案. 那么f[i][t]可以转移f[i][t+1]和能够与i相连的边. 那么这个转移可以看作一个转移矩阵. 首先矩阵的( ...

  8. 1250 Fibonacci数列(矩阵乘法快速幂)

    1250 Fibonacci数列  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 定义:f0=f1=1, fn=fn-1 ...

  9. 矩阵乘法+快速幂+序列递推公式

    1250: Gobonacci 时间限制: 1 Sec  内存限制: 128 MB 提交: 75  解决: 11 [提交][状态][讨论版] 题目描述 Fibonacci sequence is we ...

最新文章

  1. 飘逸的python - property及实现lazy property
  2. Java的浅拷贝与深拷贝总结
  3. ros service
  4. Quartz-JobListener解读
  5. ai边缘平滑_AI基础教程113:“效果”菜单之“画笔描边”(一)喷溅效果
  6. java access dbq_Java-Access汇总
  7. 2021-2025年中国顶级服务行业市场供需与战略研究报告
  8. pytorch: 网络层参数初始化
  9. 可视化报表Superser
  10. 学习RAID磁盘阵列
  11. 透过CES看国产手机市场变动 “中华酷联”要调位
  12. 深度学习论文翻译解析(二十):YOLOv4: Optimal Speed and Accuracy of Object Detection
  13. php phalapi,[6.3]-SDK包(PHP版) | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...
  14. java 多线程 实现死锁问题
  15. mysql数据查询(DQL)
  16. 安徽新科技计算机学校是高中吗,2021最新安徽高中排名一览表 所以高中学校
  17. element el-table 在IE浏览器 表头失效问题
  18. CAD调整十字光标的长度
  19. 2022年全球与中国烟酰胺单核苷酸(NMN)市场现状及未来发展趋势
  20. 显著图(Saliency map)

热门文章

  1. Mybatis源码分析-getMapper()源码分析
  2. 【Navidrome 开源音乐服务器】手把手教你打造属于自己的音乐播放器随时随地想听就听
  3. Springboot集成第三方jar快速实现微信、支付宝等支付场景
  4. 工业防水插头插座介绍与选型
  5. C#加载16bit灰度图像
  6. mac安装chromedriver驱动详细步骤
  7. Python之EXCEL文件转换为CSV文件
  8. ERP实施-生产模块-无物料号订单
  9. 2019年流入人口TOP10城市:第二你猜不到
  10. [转]嵌入式Linux图形系统