[HDU2157]How many ways??(矩阵乘法)
2016-05-23 16:34
471 查看
题目描述
传送门题目中为k条边,并非k个点。
题解
求Gk[a,b]即可。
代码
#include<iostream> #include<cstring> #include<cstdio> using namespace std; const int Mod=1000; int n,m,x,y,T,k; struct hp{int a[50][50];}A,unit,ans; inline hp cheng(hp a,hp b) { hp ans; memset(ans.a,0,sizeof(ans.a)); for (int i=1;i<=n;++i) for (int j=1;j<=n;++j) for (int k=1;k<=n;++k) ans.a[i][j]=(ans.a[i][j]+a.a[i][k]*b.a[k][j]%Mod)%Mod; return ans; } inline hp matrix_fast_pow(hp a,int p) { hp ans=unit; for (;p;p>>=1,a=cheng(a,a)) if (p&1) ans=cheng(ans,a); return ans; } int main() { while (~scanf("%d%d",&n,&m)) { if (!n&&!m) return 0; memset(unit.a,0,sizeof(unit.a)); for (int i=1;i<=n;++i) unit.a[i][i]=1; memset(A.a,0,sizeof(A.a)); for (int i=1;i<=m;++i) { scanf("%d%d",&x,&y); x++; y++; A.a[x][y]=1; } scanf("%d",&T); for (int i=1;i<=T;++i) { scanf("%d%d%d",&x,&y,&k); x++; y++; ans=matrix_fast_pow(A,k); printf("%d\n",ans.a[x][y]); } } }
相关文章推荐
- 函数对象为构造函数参数时
- 如何将pdf图片转换成jpg
- Android N Preview 行为变更
- OkHttp源码分析之基本框架2
- Linux线程间同步机制_条件变量
- .c文件如何编译为ko的MAKEFILE文件编写
- C#读取目录下的某一格式的文件
- JVM底层又是如何实现synchronized
- 输入相关函数
- AbstractIdleService服务类用法
- Hadoop学习
- Fragment相关研究
- c++相关链接总结
- LinuxC/C++编程(3)—异步清理子进程(避免成为僵尸进程)
- 用TeXStudio打开WinEdt Latex中文乱码的解决办法
- Java设计模式之单例模式
- mysql5.7.12直接解压zip包,安装过程
- UML关系图
- c++ const的使用方法
- cmd命令提示符大全(3)