hdu 5411
来源:互联网 发布:淘宝宝贝草稿在哪里找 编辑:程序博客网 时间:2024/06/10 08:04
分析:
首先我们知道了邻接矩阵A,那么A^k代表的就是长度为k的路径有多少个。那么结果就是A^0+A^1+A^2+...+A^m。然后我们可以构造一个矩阵来帮助我们求解。
X = [A,E;0,E]
==> 然后X^m 的矩阵的右上角的矩阵代表的就是A^0+A^1+A^2+...+A^m。
代码:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn = 105;const int mod = 2015;struct Matrix{int m[maxn][maxn];Matrix(){memset(m,0,sizeof(m));}};int n,m;Matrix I;Matrix mul(Matrix a,Matrix b){Matrix c;for(int i = 1; i <= 2*n; i++)for(int j = 1; j <= 2*n; j++){for(int k = 1; k <= 2*n; k++){c.m[i][j] = (c.m[i][j] + a.m[i][k]*b.m[k][j]) % mod;}}return c;}Matrix power(int k,Matrix A){Matrix ans = I;while(k){if(k & 1) ans = mul(ans,A);A = mul(A,A);k = k >> 1;}return ans;}void init(){for(int i = 1; i < maxn; i++)I.m[i][i] = 1;}int main(){int t;init();cin>>t;while(t--){cin>>n>>m;Matrix A;for(int i = 1; i <= n; i++){int k,a;cin>>k;while(k--){cin>>a;A.m[i][a] = 1;}}for(int i=1; i<=n; i++) A.m[i][i+n] = 1; for(int i=n+1; i<=2*n; i++) A.m[i][i] = 1; int sum = 0;A = power(m,A);for(int i = 1; i <= n; i++)for(int j = n+1; j <= 2*n; j++)sum = (sum + A.m[i][j]) % mod;cout<<sum+1<<endl;}return 0;}
0 0
- hdu 5411
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- Tomcat 设置JVM参数并验证是否设置成功
- Android Design Support Library控件使用总结(一)
- Android5.0之Palette简单实用
- iOS开发笔记--设置UITextField键盘上return key不可点击
- Java集合类
- hdu 5411
- 新手引导的思路(抛弃引擎)
- jqGrid中文说明
- Android判断当前应用程序处于前台还是后台的两种方法
- Linux中ctrl+z 、ctrl+c、 ctrl+d区别
- poj 2186 Popular Cows
- 黑马程序员 一位数组的基本知识总结
- Ext.form.FieldSet字段集
- 三字经