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很大, ...
随机推荐
- Java基础之关键字
一.Java关键字总览 基本数据类型(9):boolean.char.byte.short.int.long.float.double.null 变量引用(2):super.this 类.方法.变量修 ...
- java.io.IOException: Cannot find any registered HttpDestinationFactory from the Bus.
转自:https://blog.csdn.net/u012849872/article/details/51037374
- Sort和UnSort的小技巧
Sort和UnSort的小技巧: 记录sortidx,对sortidx再从小到大排序就可以得到用于还原的unsortidx. 对于序列A: sort_idx = np.argsort(A) un_so ...
- Python学习历程之面对对象浅识
# ===============================封装====================================# class Bar:# def __init__(se ...
- 常见问题处理之Emoji
所谓Emoji就是一种在Unicode位于\u1F601-\u1F64F区段的字符.这个显然超过了目前常用的UTF-8字符集的编码范围\u0000-\uFFFF.Emoji表情随着IOS的普及和微信的 ...
- [转]SQL Server 批量完整备份
最近我们的服务器需要迁移,服务器上有很多数据库,有很多都不知道干什么的了,但是为了保险起见,我决定都备份下,起初我是右键一个一个备份的,备份三四个还好,可是数据库太多了,而且手动一步一步操作,还得修改 ...
- Controller总结
下图显示了组建之间的基本控制流程 1.1控制器工厂.动作调用器 控制器工厂负责创建对请求进行服务的控制器实例 动作调用其负责查找并调用控制器类中的动作方法. 1.2自定义控制器工厂 namespace ...
- javascript中常用数组方法详细讲解
javascript中数组常用方法总结 1.join()方法: Array.join()方法将数组中所以元素都转化为字符串链接在一起,返回最后生成的字符串.也可以指定可选的字符串在生成的字符串中来分隔 ...
- 后台通过Request取得多个含有相同name的控件的值
string[] arrWeight = context.Request.Params.GetValues("Quantity");
- ZBrush中如何对模型进行减面操作
Decimation Master是ZBrush 4R8自带的一个插件.中文名叫减面大师.其功能非常强大,也非常的方便,可以帮助我们提高效率,减少电脑资源损耗.作为一名3D美术师是必须掌握的一个技术. ...