首页 > 其他分享 >【AT_dp_r】Walk

【AT_dp_r】Walk

时间:2023-02-05 09:45:29浏览次数:52  
标签:limits int sum 矩阵 long Walk ans dp

又是简单题。

我们知道弗洛伊德可以求解传递闭包

我们有矩阵 \(M\),我们给 \(M_{k,i,j}\) 定义为 \(i\to j\) 长度为 \(k\) 的路径数,细想不难发现有转移:

  • \(M_{k,i,j}=\sum\limits_{p=1}^{n} (M_{k-1,i,p}\times M_{1,p,j})\)。

直接暴力弗洛伊德得到了 \(kn^3\) 的上天复杂度。

我们发现这实际就是矩阵乘法,\(M_{k}=M_{k-1}\times M_1\)。

直接矩阵乘法即可——\(M_k=M_1^k\),结果为 \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n} M_{k,i,j}\)。

得到了 \(O(n^3\log k)\) 的做法。

通过记录

#include <stdio.h>
#include <string.h>
using namespace std;
int n;
long long k;
const int mod=1e9+7;
class Matrix{
	public:
		long long s[105][105];
		void input(){
			for(int i=1;i<=n;i++)
				for(int j=1;j<=n;j++)
					scanf("%lld",&s[i][j]);
		}
		void output(){
			int ret=0;
			for(int i=1;i<=n;i++){
				for(int j=1;j<=n;j++)
					(ret+=s[i][j])%=mod;
			}
			printf("%d",ret);
		}
}ans,mid,a;
Matrix operator *(const Matrix& a,const Matrix& b){
	memset(mid.s,0,sizeof mid.s);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			for(int k=1;k<=n;k++){
				mid.s[i][j]+=a.s[i][k]*b.s[k][j];
				mid.s[i][j]%=mod;
			}
	return(mid);
}
int main(){
	scanf("%d %lld",&n,&k);
	a.input();
	for(int i=1;i<=n;i++)ans.s[i][i]=1;
	while(k>0){
		if(k&1)ans=ans*a;
		a=a*a;
		k>>=1;
	}
	ans.output();
	return(0);
}

标签:limits,int,sum,矩阵,long,Walk,ans,dp
From: https://www.cnblogs.com/Syara/p/17092872.html

相关文章

  • 闫氏DP法
    闫氏dp法与传统dp的区别是————从集合角度考虑dp问题dp问题一、状态表示(f[i][j])(1)集合明确f[i][j]表示的是什么集合如:数字三角形模型中f[i][j]表示的是从(1,1)到(i,j......
  • 动态规划DP
    动态规划DP一般DP的组成一般DP主要分为两个部分:表示状态,状态转移这里以P1216[USACO1.5][IOI1994]数字三角形NumberTriangles为例表示状态答案为从上到下的路径......
  • P1472 奶牛家谱 Cow Pedigrees(DP)
    题目描述农民约翰准备购买一群新奶牛。在这个新的奶牛群中,每一个母亲奶牛都生两个小奶牛。这些奶牛间的关系可以用二叉树来表示。这些二叉树总共有N个节点(3<=N<200)......
  • 缩点-将图转化为 DAG 跑 DP :P1455,P2169
    之前有提到,缩点可以将一张有向图转化为一张有向无环图(DAG),这样我们就可以在图上跑DP了。而我们实现DP的手段一般是在拓扑排序中实现,有时候也会用到最短路。P1455https......
  • Error: client: etcd cluster is unavailable or misconfigured; error #0: client:
    这种报错是因为配置出现了问题我们需要修改etcd的配置文件就可以了vim/etc/etcd/etcd.conf  重启etcd即可systemctlrestartetcd.service ......
  • 数位DP
    数位DPTODO补充数位$DP$概念等补充题目分析及过程增加题目题目CF1073E.SegmentSumCF1073E.SegmentSum求$L\simR$之间最多不包含$K$个数码的数的和......
  • IIS WordPress 单站点,多站点 中文URL乱码和重定向多次问题解决方法
    前提是需要安装IISURL重写组件(安装方法这里不说明,搜一下资料就有)1、站点网站根目录新增一个chineseurl.php文件用来处理中文url问题<?php//IISMod-Rewriteif(is......
  • 【转载】APM——SkyWalking 是什么
    原文地址:1、https://zhuanlan.zhihu.com/p/3615792942、https://www.cnblogs.com/itxiaoshen/p/16513711.htmlgithub:  https://skywalking.apache.org/一、SkyWalki......
  • WordPress4.6任意命令执行漏洞
    前言WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也算是一个内容管理系统(CMS)环境搭建docker环境(......
  • 树形dp
    大佬博客由于树形dp种类繁多,而且大佬博客中总结的很好,这里我就只记录下我写到的树形dp《F-Components》  简单的来说就是:给一颗有n个节点的树,因......