1297: [SCOI2009]迷路
2018-03-22 12:21
513 查看
题目链接
题目大意:n 个节点的有向图,求从1到n的长度为T的路径条数
题解:拆点+矩阵乘法
我的收获:2333
题目大意:n 个节点的有向图,求从1到n的长度为T的路径条数
题解:拆点+矩阵乘法
我的收获:2333
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define M 100 #define MOD 2009 #define P(i,j) (((j)-1)*m+(i)) using namespace std; struct Matrix{ int xx[M][M]; Matrix() { memset(xx,0,sizeof xx); } int* operator [] (int x) { return xx[x]; } }a,map; int n,m,t; void operator *= (Matrix &x,Matrix &y) { int i,j,k; Matrix z; for(i=1;i<=n;i++) for(j=1;j<=n;j++) for(k=1;k<=n;k++) z[i][j]+=x[i][k]*y[k][j],z[i][j]%=MOD; x=z; } void Quick_Power(int y) { static Matrix x=map; while(y) { if(y&1)a*=x; x*=x; y>>=1; } } int main() { int i,j,x,last; cin>>m>>t;n=m*9; for(i=1;i<=m;i++) for(j=2;j<=9;j++) map[P(i,j)][P(i,j-1)]=1; for(i=1;i<=m;i++) for(j=1;j<=m;j++) { scanf("%1d",&x); if(x==0) continue; map[i][P(j,x)]=1; } for(i=1;i<=n;i++) a[i][i]= 4000 1; Quick_Power(t); printf("%d\n",a[1][m]); return 0; }
相关文章推荐
- bzoj 1297: [SCOI2009]迷路(矩阵优化DP)
- [BZOJ1297][SCOI2009]迷路(拆点+矩阵乘法)
- BZOJ1297 [SCOI2009]迷路
- [BZOJ1297][SCOI2009]迷路
- bzoj 1297: [SCOI2009]迷路
- BZOJ 1297 [SCOI2009] 迷路
- bzoj 1297: [SCOI2009]迷路(矩阵快速幂)
- [SCOI2009]BZOJ1297 迷路 - 矩阵乘法
- BZOJ 1297: [SCOI2009]迷路( dp + 矩阵快速幂 )
- [Bzoj1297][Scoi2009 ]迷路 (矩阵乘法 + 拆点)
- 【矩阵快速幂】bzoj1297 [SCOI2009]迷路
- [bzoj1297][SCOI2009]迷路
- 图论矩乘——BZOJ1297 [SCOI2009]迷路
- B20J_1297_[SCOI2009]迷路_矩阵乘法
- BZOJ 1297: [SCOI2009]迷路 [矩阵快速幂]
- [题解]bzoj1297(SCOI2009)迷路
- bzoj 1297 [SCOI2009]迷路
- bzoj1297 [SCOI2009]迷路
- [BZOJ 1297][SCOI2009]迷路
- 【bzoj1297】[SCOI2009]迷路