题目来源:AtCoder EDU DP题集

题目链接:Here

单独拎出来是因为这道题是一个很好的板子,值得记录

题意

给定一个 n 个节点的有向图的邻接矩阵,求该有向图中长度为 k 的路径长。

解法

算法涉及:倍增 Floyd

答案为该邻接矩阵的 \(k\) 次幂的行列式。

学过离散数学的后面图论的话大概都知道求有向图中长度为 \(k\) 的路径长的路径与原始图的 \(k\) 次方相关,所以只需要求原矩阵的 \(k\) 次幂即可

使用矩阵快速幂即可,时间复杂度 \(\mathcal{O}(n^2log k)\)

const int mod = 1e9 + 7;
ll n, k;
struct Matrix {
ll mat[50][50];
void clear() {memset(mat, 0, sizeof(mat));}
void reset(int n) {
clear();
for (int i = 0; i < n; ++i) mat[i][i] = 1;
}
} a;
Matrix MatrixMul(Matrix a, Matrix b) { // 矩阵快速乘
Matrix t; t.clear();
for (int i = 0; i < n; ++i)
for (int k = 0; k < n; ++k)
for (int j = 0; j < n; ++j)
t.mat[i][j] = (t.mat[i][j] + a.mat[i][k] * b.mat[k][j]) % mod;
return t;
}
ll MatrixQpow(Matrix a, ll p) { // 矩阵快速幂
Matrix s; s.reset(n);
for (; p; p >>= 1, a = MatrixMul(a, a))
if (p & 1) s = MatrixMul(s, a);
ll sum = 0;
for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j)
sum = (sum + s.mat[i][j]) % mod;
return sum;
}
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n >> k;
for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) cin >> a.mat[i][j];
cout << MatrixQpow(a, k);
}

Educational DP Contest R - Walk(倍增floyd,矩阵快速幂)的更多相关文章

  1. CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)

    问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...

  2. [POJ3613] Cow Relays(Floyd+矩阵快速幂)

    解题报告 感觉这道题gyz大佬以前好像讲过一道差不多的?然鹅我这个蒟蒻发现矩阵快速幂已经全被我还给老师了...又恶补了一遍,真是恶臭啊. 题意 给定一个T(2 <= T <= 100)条边 ...

  3. poj 3613 经过k条边最短路 floyd+矩阵快速幂

    http://poj.org/problem?id=3613 s->t上经过k条边的最短路 先把1000范围的点离散化到200中,然后使用最短路可以使用floyd,由于求的是经过k条路的最短路, ...

  4. POJ 3631 Cow Relays Floyd+矩阵快速幂

    题目描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...

  5. foj 2173 floyd+矩阵快速幂

     Problem 2173 Nostop Accept: 52    Submit: 210 Time Limit: 3000 mSec    Memory Limit : 32768 KB  Pro ...

  6. POJ 3613 floyd+矩阵快速幂

    题意: 求s到e恰好经过n边的最短路 思路: 这题已经被我放了好长时间了. 原来是不会矩阵乘法,快速幂什么的也一知半解 现在终于稍微明白了点了 其实就是把矩阵乘法稍微改改 改成能够满足结合律的矩阵&q ...

  7. UVA11149 Power of Matrix —— 矩阵倍增、矩阵快速幂

    题目链接:https://vjudge.net/problem/UVA-11149 题意: 给出矩阵A,求出A^1 + A^2 …… + A^k . 题解: 1.可知:A^1 + A^2 …… + A ...

  8. poj 3420 Quad Tiling (状压dp+多米诺骨牌问题+矩阵快速幂)

    还有这种操作?????? 直接用pre到now转移的方式构造一个矩阵就好了. 二进制长度为m,就构造一个长度为1 << m的矩阵 最后输出ans[(1 << m) - 1][( ...

  9. fzu 2173 floyd+矩阵快速幂

    #include<stdio.h> #define inf 1000000000000000 #define N 100 long long tmp[N][N],ma[N][N]; int ...

  10. bnuoj 34985 Elegant String DP+矩阵快速幂

    题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=34985 We define a kind of strings as elegant s ...

随机推荐

  1. Linux RN6752 驱动编写

    一.概述 关于 RN6752V1 这个芯片这里就不做介绍了,看到这篇笔记的小伙伴应该都明白,虽然说 RN6752V1 芯片是 AHD 信号的解码芯片,但是也可以把芯片当做是一个 YUV 信号的 MIP ...

  2. 2020-2021 “Orz Panda” Cup Programming Contest G题(树形结构)

    题目传送门 题目大意:给点一颗包含 \(n\)个节点的无根树,有 \(m\)次询问,每次询问给出两个点 \(u\)和 \(v\),要求计算 \[\sum_{r=1}^{n}d_{r}(u,v) \] ...

  3. 用最清爽的方式开发dotNet

    用最清爽的方式开发dotNet 不管是官方自带模板还是其他开源搞的,总是一来一大堆,如果你也嫌弃这些过于臃肿,不如看看我这个方式 前提 假设我要做一个简单的api 方式 想到清爽,那肯定是简单方便,脑 ...

  4. MySQL运维12-Mycat分库分表之按天分片

    一.按天分片 指定一个时间周期,将数据写入一个数据节点中,例如:第1-10天的数据,写入到第一个数据节点中,第2-20天的数据写入到第二个节点中,第3-30天的数据节点写入到第三个数据节点中. 说明1 ...

  5. C++ Qt开发:SqlTableModel映射组件应用

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍SqlTabl ...

  6. redis添加缓存配置类

    redis添加缓存配置类 package com.atguigu.servicebase.config; import com.fasterxml.jackson.annotation.JsonAut ...

  7. Android SDK Manager 报错“加载 SDK 组件信息失败”。(Android SDK Manager complains with "Loading SDK component information failed."

    [解决方案]: 将存储库设置更改为 Google .因此,在 android SDK 管理器上点击齿轮图标(设置),然后点击 Repository -> Google.

  8. 【李南江】从零玩转TypeScript

    前言 老套路肯定是 需要知道TS是干啥用的啦. 1.什么是TypeScript(TS)? TypeScript简称TS TS和JS之间的关系其实就是Less/Sass和CSS之间的关系 就像Less/ ...

  9. Windows 无法加载这个硬件的设备驱动程序。驱动程序可能已损坏或不见了。 (代码 39)

    哔站中有视频解决方案,可以直观看如何操作:Windows 无法加载这个硬件的设备驱动程序.驱动程序可能已损坏或不见了. (代码 39) 第一步:明确感叹号故障硬件(我的是蓝牙也可以是别的)--右键&q ...

  10. 川普真会说中文?连嘴型都同步,用VideoReTalking一键生成你的AI播报员

    你能想到这种画面吗?霉霉在节目中用普通话接受采访,特朗普在老家用中文脱口秀,蔡明老师操着一口流利的英文调侃潘长江老师.. 这听起来似乎很魔幻,可如今全部由VideoReTalking实现了 你只需要传 ...