矩阵-bzoj1898
This article is made by Jason-Cow.
Welcome to reprint.
But please post the article's address.
图上求路径数问题
随机地加入一些“鱼”,它们的变化有周期性,且周期为2,3或4
人不可与“鱼”共处一个柱子,问从S->T恰好经过K步的方案数
很容易想到BFS,但是K太大
观察到lcm(2,3,4)=12
所以可以用矩阵存储,求出转移矩阵,然后快速幂加速
Ans=A[]^(K/)
然后对于剩下的K%12累乘过去
Ans=Ans*A[i]
题目里有一些板子,总结一下,可以备用
1.矩阵乘法,忽略 “ +0 ”
Matrix operator*(Matrix A,Matrix B){
Matrix C;
for(int k=;k<=N;k++)
for(int i=;i<=N;i++)
if(A.a[i][k])
for(int j=;j<=N;j++)
if(B.a[k][j])
(C.a[i][j]+=(A.a[i][k]*B.a[k][j])%MOD)%=MOD;
return C;
}
2.矩阵快速幂,基于“ * ”
Matrix operator^(Matrix A,int b){
Matrix ans;for(int i=;i<=N;i++)ans.a[i][i]=;
for(;b;A=A*A,b>>=)if(b&)ans=ans*A;
return ans;
}
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <map>
#include <set>
using namespace std;
#define file(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
inline int _(){
int ans=;char x=getchar();bool f=;
while(x<''||x>''){if(x=='-')f=;x=getchar();}
while(x>=''&&x<='')ans=ans*+x-'',x=getchar();
return f?-ans:ans;
}
const int MOD=,SZ=;
int N,M,S,T,K,F,f[][],t[];
struct Matrix{
int a[SZ][SZ];
Matrix(){memset(a,,sizeof(a));}
}A[],Ans;
Matrix operator*(Matrix A,Matrix B){
Matrix C;
for(int k=;k<=N;k++)
for(int i=;i<=N;i++)
if(A.a[i][k])
for(int j=;j<=N;j++)
if(B.a[k][j])
(C.a[i][j]+=(A.a[i][k]*B.a[k][j])%MOD)%=MOD;
return C;
}
Matrix operator^(Matrix A,int b){
Matrix ans;for(int i=;i<=N;i++)ans.a[i][i]=;
for(;b;A=A*A,b>>=)if(b&)ans=ans*A;
return ans;
}
int main(){
N=_(),M=_(),S=_()+,T=_()+,K=_();
int i,j,k,x,y;
for(i=;i<=M;i++)
for(x=_()+,y=_()+,j=;j<=;j++)A[j].a[x][y]=A[j].a[y][x]=; for(F=_(),i=;i<=F;i++)
for(j=,t[i]=_();j<=t[i];j++)f[i][j]=_()+; for(i=;i<=F;i++)
for(j=;j<=;j++)
for(k=,x=f[i][j%t[i]+];k<=N;k++)
A[j].a[k][x]=; for(i=;i<=N ;i++)A[].a[i][i]=;
for(i=;i<=;i++)A[]=A[]*A[i];
Ans=A[]^(K/);
for(i=;i<=K%;i++)Ans=Ans*A[i];
printf("%d\n",Ans.a[S][T]);
return ;
}
矩阵-bzoj1898的更多相关文章
- BZOJ1898 [Zjoi2005]Swamp 沼泽鳄鱼 矩阵
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1898 题意概括 有一个无向图. 其中,有许多条鱼在以循环的规律出现,比如循环在1,2,3这些点出现 ...
- 【BZOJ1898】[ZJOI2005]沼泽鳄鱼(矩阵快速幂,动态规划)
[BZOJ1898][ZJOI2005]沼泽鳄鱼(矩阵快速幂,动态规划) 题面 BZOJ 洛谷 题解 先吐槽,说好了的鳄鱼呢,题面里面全是食人鱼 看到数据范围一眼想到矩乘. 先不考虑食人鱼的问题,直接 ...
- 【BZOJ1898】[Zjoi2005]Swamp 沼泽鳄鱼 矩阵乘法
[BZOJ1898][Zjoi2005]Swamp 沼泽鳄鱼 Description 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎 ...
- 【BZOJ-1898】Swamp 沼泽鳄鱼 矩阵乘法
1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1012 Solved: 566[Submit][S ...
- BZOJ1898: [Zjoi2005]Swamp 沼泽鳄鱼(矩阵快速幂)
题意 题目链接 Sol 不难发现吃人鱼的运动每\(12s\)一个周期 所以暴力建12个矩阵,放在一起快速幂即可 最后余下的部分暴力乘 #include<bits/stdc++.h> usi ...
- bzoj1898 [Zjoi2005]Swamp 沼泽鳄鱼——矩阵快速幂
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 求到达方案数...还是矩阵快速幂: 能够到达就把邻接矩阵那里赋成1,有鳄鱼的地方从各处 ...
- BZOJ1898: [Zjoi2005]Swamp 沼泽鳄鱼(矩阵乘法)
1898: [Zjoi2005]Swamp 沼泽鳄鱼 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 Description 潘塔 ...
- BZOJ1898: [Zjoi2004]Swamp 沼泽鳄鱼
1898: [Zjoi2004]Swamp 沼泽鳄鱼 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 478 Solved: 286[Submit][St ...
- C语言 · 矩阵乘法 · 算法训练
问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...
随机推荐
- C语言库函数strstr、strch比较
该库函数包含在<string.h>头文件中,函数原型:extern char *strstr(char *str1, const char *str2);使用方法 char *strstr ...
- 《操作系统真象还原》bochs安装
在安装bochs之前,我们先需要安装虚拟机和linux发行版,也可以安装双系统,总之有个linux操作系统就好. 我是在ubuntu14.04系统下安装bochs的. 安装Bochs 以下为安装步骤 ...
- 部件MSCOMCTL.OCX或其附件之一不能正确注册:一个文件丢失或无效
部件MSCOMCTL.OCX或其附件之一不能正确注册:一个文件丢失或无效: https://blog.csdn.net/yilese/article/details/71479908
- [AtCoder Code Festival 2017 QualB C/At3574] 3 Steps - 二分图染色,结论
给你一个n个点m条边的无向图,进行以下操作 如果存在两个点u和v,使得从u走三步能恰好到达v,那么在u和v之间连接一条边 重复这个操作直到不能再连接新的边,问最后有多少条边? n, m <= 1 ...
- Keep、小红书、美图…独角兽App能拿到新一轮救命钱吗?
大多数人热爱手机,不是因为时尚的外观或者结实的零部件,而是因琳琅满目的App赋予其太多的功能.智能手机最先是清理掉人类的零碎时间,现如今又开始肢解我们大块的时间,或者说,智能手机本身就是生活.在如此背 ...
- VMware vSphere Client
复制虚拟机 在虚拟机关机状态下,选中一个虚拟机,文件 - 导出 - 导出OVF模板,导出成功后,再文件 - 部署OVF模板(修改IP.MAC.主机名称)
- docker在windows下和linux下网络底层的一些区别
windows和linux下的docker运行时的网络结构是有区别的 a.windows下,默认使用Hyper-v创建一个linux虚拟机,承载docker.所以从外向内的路径为: windows - ...
- HttpModule介绍
https://cloud.tencent.com/developer/article/1347498 引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了H ...
- python2下解决json的unicode编码问题
基础知识: 序列化——json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为json字符串) 反序列化—— ...
- vector,list不是模板
vector和list在命名空间std里,还需要添加声明 using namespace std; 或者 std::list 也可以.