bzoj 1297 矩阵乘法变形
首先对于矩阵乘法的功能有很多,记得有篇论文叫矩阵乘法在信息学竞赛中的应用,里面详细介绍了矩阵的
作用
其中一个就是求图的固定时间方案数,也就是给定一张图,每两个点之间由一条边长为1的边相连,
求任意两点之间的路径和为x的方案数
论文很详细,这里只做简要的说明
对于矩阵乘法,具体代码为
for i:= to n do
for j:= to n do
for k:= to n do a[i,j]:=a[i,j]+b[i,k]*c[k,j];
那么如果b矩阵,b[i,j]代表I到J,路径长为x的方案数,c[i,j]代表I到J,路径长为Y的方案数,那么k相当于中转点
c[i,j]这样转移之后,根据加法原理,就代表I到J,路径长为X+Y的方案数,这样就可以转移了
那么我们初始矩阵,ans[I,J]=1代表I,J之间有边(这里指有向边),将这个矩阵自乘X次得到的就是答案矩阵了,
即ans[I,J]为I到J长为X的方案数
那么对于这道题,他的路径长度可以为1-9,那么我们把一个点拆成一条有向链,然后假设连接I,J长度为3,
就连I链中第3个点,J中第一个点,长度为1的边就行了
/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/
//By BLADEVIL
type
rec =array[..,..] of longint;
var
n, t :longint;
sum, ans :rec;
procedure init;
var
i, j :longint;
len :longint;
ss :char;
begin
readln(n,t);
for i:= to n do
begin
for j:= to n do
begin
read(ss);
len:=ord(ss)-;
if len= then continue;
sum[(i-)*+len,(j-)*+]:=;
end;
readln;
end;
for i:= to n do
for j:= to do sum[(i-)*++j,(i-)*+j+]:=;
end;
function mul(a,b:rec):rec;
var
i, j, k :longint;
begin
fillchar(mul,sizeof(mul),);
for i:= to n* do
for j:= to n* do
for k:= to n* do mul[i,j]:=(mul[i,j]+a[i,k]*b[k,j]) mod ;
end;
procedure main;
var
p :longint;
i, j :longint;
begin
for i:= to n* do ans[i,i]:=;
p:=t;
while p<> do
begin
if p mod = then ans:=mul(sum,ans);
sum:=mul(sum,sum);
p:=p div ;
end;
writeln(ans[,(n-)*+]);
end;
begin
init;
main;
end.
bzoj 1297 矩阵乘法变形的更多相关文章
- [BZOJ 2738] 矩阵乘法 【分块】
题目链接:BZOJ - 2738 题目分析 题目名称 “矩阵乘法” 与题目内容没有任何关系..就像VFK的 A+B Problem 一样.. 题目大意是给定一个矩阵,有许多询问,每次询问一个子矩阵中的 ...
- bzoj 2738 矩阵乘法
其实这题跟矩阵乘法没有任何卵关系,直接整体二分,用二维树状数组维护(刚刚学会>_<),复杂度好像有点爆炸(好像有十几亿不知道是不是算错了),但我们不能怂啊23333. #include&l ...
- BZOJ 2738: 矩阵乘法 [整体二分]
给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 愚蠢的名字...... 整体二分,影响因子就是矩阵里的数 把$\le mid$的矩阵元素加到二维树状数组里然后询问分成两组就行 ...
- bzoj 2326 矩阵乘法
[HNOI2011]数学作业 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2415 Solved: 1413[Submit][Status][Di ...
- BZOJ.2738.矩阵乘法(整体二分 二维树状数组)
题目链接 BZOJ 洛谷 整体二分.把求序列第K小的树状数组改成二维树状数组就行了. 初始答案区间有点大,离散化一下. 因为这题是一开始给点,之后询问,so可以先处理该区间值在l~mid的修改,再处理 ...
- bzoj 3240 矩阵乘法+十进制快速幂
首先,构造出从f[][i]->f[][i+1]的转移矩阵a,和从f[i][m]->f[i+1][1]的转移矩阵b, 那么从f[1][1]转移到f[n][m]就是init*(a^(m-1)* ...
- BZOJ 2738 矩阵乘法(整体二分+二维树状数组)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2738 [题目大意] 给出一个方格图,询问要求求出矩阵内第k小的元素 [题解] 我们对答 ...
- bzoj 2738: 矩阵乘法【整体二分+树状数组】
脑子一抽开始写主席树,敲了一会发现不对-- 整体二分,用二维树状数组维护值为当前区间的格子个数,然后根据k的大小和当前询问的子矩阵里的值和k的大小关系来决定这个询问放在哪一部分向下递归 #includ ...
- [BZOJ 1297][SCOI 2009]迷路(矩阵快速幂)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1297 分析:如果每条边的边权都是1,那么就相当于对邻接矩阵自乘T次(因为写一下递推式子 ...
随机推荐
- android中的文件(图片)上传
android中的文件(图片)上传其实没什么复杂的,主要是对 multipart/form-data 协议要有所了解. 关于 multipart/form-data 协议,在 RFC文档中有详细的描述 ...
- Nullable可空类型
一个Nullable类型就是基本类型加上一个"是否为null指示器"的合成类型.对于一个类型,如果既可以给他分配一个值,也可以给它分配null引用,我们就说这个类型是可空的. 可空 ...
- Python 3基础教程24-读取csv文件
本文来介绍用Python读取csv文件.什么是csv(Comma-Separated Values),也叫逗号分割值,如果你安装了excel,默认会用excel打开csv文件. 1. 我们先制作一个c ...
- github 初始化操作小记
Git作为一种越来越重要的工具,github又如此流行,现在就简单记录一下git的基础操作,希望能帮助大家快速体验入门! 1 查看本地是否存在”公钥”和”私钥” 如果没有,则执行: ssh-keyg ...
- python 网络篇(网络编程)
一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运行,你就会发现,这两个python的文件分别运行的很好.但是如果这两个程序之间想要传递一个数据, ...
- Kubernetes集群(概念篇)
Kubernetes介绍 2013年docker诞生,自此一发不可收拾,它的发展如火如荼,作为一个运维如果不会docker,那真的是落伍了. 而2014年出现的kubernetes(又叫k8s)更加炙 ...
- Paper Reading - Show and Tell: Lessons learned from the 2015 MSCOCO Image Captioning Challenge
Link of the Paper: https://arxiv.org/abs/1609.06647 A Correlative Paper: Show and Tell: A Neural Ima ...
- ubuntu中tensorflow安装
首先加入了CUDA_HOM环境变量,然后下载了一个分析工具库,结果E: 无法定位软件包 libcupti-dev,在etc/apt 的sources.list 添加镜像源 deb http://arc ...
- antDesign DatePicker 禁用日期
const disabledDate = (current) => { return current < moment().subtract(29, 'days') || current ...
- html页面简单制作示例
内有表格布局,具体见 链接: https://pan.baidu.com/s/1V7IcxQ5M-iXVdlzuf8bo-A 密码: 8dp8