本题目意思:

给定n个点,给定一个n*n的转移矩阵,要求求出所有长度不大于M的序列个数,(M<=1E5 , n <= 50)

分析:

记 d[i][j] 生成至多长度为i的且以j开头的所有串的个数,d[i+1][j] = sum( d[ i][ k ] )+1( 其中 j->k可达)

那么

记矩阵tran (n+1,n+1)=

[               0

A,           0

.

.

1,1,1,1.....1](其中A为转移矩阵)

[d[i][1],d[i][2], d[i][3]....d[i ][n], 1 ] * tran =    [d[i+1][1],d[i+1][2], d[i+1][3]....d[i+1 ][n], 1 ];

这样先把tran快速幂M-1次,在求和即可。复杂度 (n^3*log(m));

自己第一开始是用的正推的公式,怎么也建不出转移矩阵,倒着推得好理解,好建矩阵,主要是矩阵当前矩阵只用来获取等号左边的值而不是右边。

#include<cstring>
#include<cstdio>
#include<algorithm>
#include <iostream>
using namespace std;
const int N = 55;
#define rep(i,n) for(int i=0;i<(int)n;i++)
#define rep1(i,x,y) for(int i=x;i<=(int)y;i++)
int n,m;
struct Matrix{int m[N][N];void init(){memset(m,0,sizeof(m)); }void standard(){rep1(i,0,n) rep1(j,0,n) m[i][j]=(i==j);}void show(){rep1(i,0,n) rep1(j,0,n){cout<<m[i][j]<<" "; if(j==n) cout<<endl;}}
};
const int mod = 2015;
Matrix mul(Matrix A,Matrix B){Matrix C;rep1(i,0,n) rep1(j,0,n){C.m[i][j]=0;rep1(k,0,n) C.m[i][j]=(C.m[i][j]+A.m[i][k]*B.m[k][j])%mod;}return C;
}
Matrix pow_mul(Matrix A,int b){Matrix ans; ans.standard();while(b){if(b&1) ans=mul(ans,A);A=mul(A,A);b>>=1;}return ans;
}
int main()
{int T;scanf("%d",&T);while(T--){scanf("%d %d",&n,&m);Matrix A; A.init();rep(i,n){int k ,x; scanf("%d",&k);rep(j,k){scanf("%d",&x); --x;A.m[x][i]=1;}}rep1(i,0,n) A.m[n][i]=1;if(m == 0) { printf("1\n"); continue;}A = pow_mul(A,m-1);int ans = 0;rep1(i,0,n) rep1(j,0,n) ans=(ans+A.m[i][j])%mod;printf("%d\n",ans);}return 0;
}

HDU 5411(矩阵快速幂)相关推荐

  1. hdu 1757(矩阵快速幂)

    题意:公式如下 If x < 10 f(x) = x. If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + -- + a ...

  2. hdu 5411 CRB and Puzzle(矩阵快速幂)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5411 解题思路: 题目大意: 给定n个点 常数m 下面n行第i行第一个数字表示i点的出边数,后面给出 ...

  3. HDU 6185 Covering 矩阵快速幂 递推

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6185 题目描述: 一个4*n的矩形, 你用1*2的矩形覆盖有多少种方案, n <= 1e18 ...

  4. hdu 5451 Best Solver 矩阵循环群+矩阵快速幂

    http://acm.hdu.edu.cn/showproblem.php?pid=5451 题意:给定x    求解 思路: 由斐波那契数列的两种表示方法, 之后可以转化为 线性表示 F[n] = ...

  5. 【HDU - 4990】 Reading comprehension (构造+矩阵快速幂)

    题干: Read the program below carefully then answer the question.  #pragma comment(linker, "/STACK ...

  6. HDU 1757 A Simple Math Problem(矩阵快速幂)

    题目链接 题意 :给你m和k, 让你求f(k)%m.如果k<10,f(k) = k,否则 f(k) = a0 * f(k-1) + a1 * f(k-2) + a2 * f(k-3) + -- ...

  7. HDU 2276 Kiki Little Kiki 2 (位运算+矩阵快速幂)

    HDU 2276 Kiki & Little Kiki 2 (位运算+矩阵快速幂) ACM 题目地址:HDU 2276 Kiki & Little Kiki 2 题意:  一排灯,开关 ...

  8. hdu 2842 Chinese Rings 矩阵快速幂

    分析: 后面的环能不能取下来与前面的环有关,前面的环不被后面的环所影响.所以先取最后面的环 设状态F(n)表示n个环全部取下来的最少步数 先取第n个环,就得使1~n-2个环属于被取下来的状态,第n-1 ...

  9. HDU 2243考研路茫茫——单词情结 (AC自动机+矩阵快速幂)

    背单词,始终是复习英语的重要环节.在荒废了3年大学生涯后,Lele也终于要开始背单词了. 一天,Lele在某本单词书上看到了一个根据词根来背单词的方法.比如"ab",放在单词前一般 ...

最新文章

  1. vue论坛网站的文章自动排版_基于 VuePress 定制个人博客网站
  2. jenkins插件findbugs+pmd+checkstyle结合sonar与maven(java环境代码质量和代码规范管理)...
  3. python网络爬虫权威指南 百度云-分析《Python网络爬虫权威指南第2版》PDF及代码...
  4. SpringMVC+redis整合
  5. 【百度地图API】如何制作多途经点的线路导航——驾车篇
  6. 教你11 周打造全能Python工程师!
  7. python notebook软件_Jupyter notebook快速入门教程(推荐)
  8. TaoLer V1.7.12版本简单迅捷的轻论坛系统源码
  9. Linux 内核简介
  10. ElementUI表格序号翻页后重置的解决办法
  11. java开发用win7好还是win10_win10和win7哪个好用|两个系统的性能比较
  12. linux下看学校的IPTV
  13. 用于使计算机发出嘟嘟声的宏命令,2012年计算机等级考试二级Access辅导笔记:Access宏的使用...
  14. 国产桌面操作系统到底怎么做才能有戏?
  15. Spring如何用“声明式事务”保护亿万数据安全?【万字解决并发冲突】
  16. 新年新玩法,数组“招婿”:老许,你要老婆不要?
  17. 在xml中定义excel的sheet_XML和Excel
  18. WAI-ARIA无障碍网页应用 HTML5 设计辅助功能
  19. 80、消防应急照明和疏散指示的要求
  20. RGB接口和MPU接口区别

热门文章

  1. 如何制作ISO光盘镜像,2款工具 PowerISO, UltraISO
  2. 论文笔记《Visual Dialog》
  3. python经典排序_经典排序 python实现
  4. common.js 通用方法封装
  5. 赚钱 36 计 - 第三十三计:众筹计
  6. 拷贝合并单元格时保留格式
  7. 6 个值得玩味的 Python 代码
  8. 即时通讯工具(IM)的网络营销价值
  9. 四个三菱FXF3UPLC N:N链接通讯控制八轴(三菱MR- J3)
  10. python智能家居教程_泡泡云服务器移植python3.6 home-assistant(智能家居平台)