BZOJ 1898 构造矩阵+矩阵快速幂
思路:
T的最小公倍数是12
那么12以内暴力 整除12 的部分用矩阵快速幂
//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,st,ed,k,nfish,T,p[5],can[13][55];
struct Matrix{
int a[55][55];
void init(){memset(a,0,sizeof(a));}
void Change(){for(int i=0;i<n;i++)a[i][i]=1;}
friend Matrix operator*(Matrix a,Matrix b){
Matrix c;c.init();
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
for(int k=0;k<n;k++)
c.a[i][j]+=a.a[i][k]*b.a[k][j];
c.a[i][j]%=10000;
}
return c;
}
friend Matrix operator^(Matrix a,int b){
Matrix c;c.init();c.Change();
for(;b;b>>=1,a=a*a)if(b&1)c=c*a;
return c;
}
}begin[13];
struct Path{int from,to;}path[2555];
int main(){
scanf("%d%d%d%d%d",&n,&m,&st,&ed,&k);
for(int i=1;i<=m;i++)scanf("%d%d",&path[i].from,&path[i].to);
scanf("%d",&nfish);
while(nfish--){
scanf("%d",&T);
for(int i=0;i<T;i++)scanf("%d",&p[i]);
for(int i=0;i<12;i++)can[i][p[i%T]]=1;
}
for(int i=0;i<n;i++)can[12][i]=can[0][i];
begin[0].Change();
for(int i=1;i<=12;i++){
for(int j=1;j<=m;j++){
if(!can[i-1][path[j].from]&&!can[i][path[j].to])
begin[i].a[path[j].from][path[j].to]++;
if(!can[i-1][path[j].to]&&!can[i][path[j].from])
begin[i].a[path[j].to][path[j].from]++;
}
begin[0]=begin[0]*begin[i];
}
begin[0]=begin[0]^(k/12);
for(int i=1;i<=k%12;i++)begin[0]=begin[0]*begin[i];
printf("%d\n",begin[0].a[st][ed]);
}
BZOJ 1898 构造矩阵+矩阵快速幂的更多相关文章
- Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂)
Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂) Description 广义的斐波那契数列是指形如\[A_n=p*a_{n-1}+q*a_{n-2}\]的数列.今给定数列的两系数p和q, ...
- 洛谷 P4910 帕秋莉的手环 矩阵乘法+快速幂详解
矩阵快速幂解法: 这是一个类似斐波那契数列的矩乘快速幂,所以推荐大家先做一下下列题目:(会了,差不多就是多倍经验题了) 注:如果你不会矩阵乘法,可以了解一下P3390的题解 P1939 [模板]矩阵加 ...
- Qbxt 模拟赛 Day4 T2 gcd(矩阵乘法快速幂)
/* 矩阵乘法+快速幂. 一开始迷之题意.. 这个gcd有个规律. a b b c=a*x+b(x为常数). 然后要使b+c最小的话. 那x就等于1咯. 那么问题转化为求 a b b a+b 就是斐波 ...
- 【BZOJ 2323】 2323: [ZJOI2011]细胞 (DP+矩阵乘法+快速幂*)
2323: [ZJOI2011]细胞 Description 2222年,人类在银河系外的某颗星球上发现了生命,并且携带了一个细胞回到了地球.经过反复研究,人类已经完全掌握了这类细胞的发展规律: 这种 ...
- 矩阵乘法快速幂 codevs 1574 广义斐波那契数列
codevs 1574 广义斐波那契数列 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 广义的斐波那契数列是指形如 ...
- BZOJ-1875 HH去散步 DP+矩阵乘法快速幂
1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Submit: 1196 Solved: 553 [Submit][Statu ...
- BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘
2326: [HNOI2011]数学作业 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1564 Solved: 910 [Submit][Statu ...
- BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘
题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...
- UVA Recurrences 矩阵相乘+快速幂
题目大意: f(n) = a1 f(n - 1) + a2 f(n - 2) + a3 f(n - 3) + ... + ad f(n - d),已给递推公式,求f(n)的大小. 解题思路: n很大, ...
随机推荐
- HTML iframe 和 frameset 的区别
转自:http://www.cnblogs.com/polk6/archive/2013/05/24/3097430.html HTML iframe 和 frameset 的区别 iframe 和 ...
- leetcode 系列文章目录
leetcode 系列文章目录 0. 两数之和1. 两数相加 2. 无重复字符的最长子串 3. 寻找两个有序数组的中位数 4. 最长回文子串 5. Z 字形变换 6. 整数反转 7. 字符串转换整数 ...
- HDU4920 矩阵乘法
嗯嗯 就算是水题吧. (缩完行就15行) 题意:两个n*n的矩阵相乘(n<=800),结果对3取模 思路:先对3取模,所以两个矩阵里面会出现很多0,所以可以先枚举一个矩阵,只有当该位置不是0的时 ...
- Combox程序中自定义数据源
有combox控件,命名为cbxPutStatus,在程序中为其手工定义数据源,并绑定 private void POrderSplitFrm_Load(object sender, EventArg ...
- JQurey大纲
- addEventListener()与removeEventListener(),追加事件和删除追加事件
addEventListener()与removeEventListener()用于追加事件和删除追加.所有的DOM节点中都包含这两种方法,并且它们都接受3个参数:要处理的事件名.作为事件处理程序的函 ...
- Python3.7中的常用关键字
本文是在学习Python中遇到的一些关键字,作为日常总结的笔记. Python中有保留字/关键字 保留字就是在Python中预先保留的标识符,这些标识符在Python程序中具有特定用途,不能被程序员作 ...
- 使用node+mysql进行后端开发
使用koa: koa2是一个类,所以引入koa后,要创建实例化“对象”,才能使用koa内部封装的方法. 设置监听端口: 处理http请求: 1.http请求处理链 A.通过app.use()注册asy ...
- 为什么使用GitHub
GitHub的特点: 1.开源式分布版本管理系统 2.开源项目集中的代码库 3.所有略有规模的公司都在使用 GitHub的功能介绍: 1.记录多个版本 2.查看历史操作,可以进行版本吧回退和前进的控制 ...
- composer install或者update 出错
composer install或者update 出错Your requirements could not be resolved to an installable set of package ...