HDU2157 How many ways??---(邻接矩阵,图论,矩阵快速幂)
2017-03-21 23:28
477 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2157
How many ways??
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3013 Accepted Submission(s): 1154
Input 输入数据有多组, 每组的第一行是2个整数 n, m(0 < n <= 20, m <= 100) 表示校园内共有n个点, 为了方便起见, 点从0到n-1编号,接着有m行, 每行有两个整数 s, t (0<=s,t<n) 表示从s点能到t点, 注意图是有向的.接着的一行是两个整数T,表示有T组询问(1<=T<=100),
接下来的T行, 每行有三个整数 A, B, k, 表示问你从A 点到 B点恰好经过k个点的方案数 (k < 20), 可以走重复边。如果不存在这样的走法, 则输出0
当n, m都为0的时候输入结束
Output 计算每次询问的方案数, 由于走法很多, 输出其对1000取模的结果
Sample Input
4 4
0 1
0 2
1 3
2 3
2
0 3 2
0 3 3
3 6
0 1
1 0
0 2
2 0
1 2
2 1
2
1 2 1
0 1 3
0 0
Sample Output
2
0
1
3
分析:
图论中,求两点(e.g. u,v)间长度为k的路径条数,可通过,求邻接矩阵的k次幂,对应找出A[u][v]值即可
问题转化求矩阵的快速幂!
#include "cstdio" #include "cstring" ///矩阵模型 struct matrix{ int a[20][20]; void init(int n) { for(int i=0;i<n;i++) memset(a[i],0,sizeof(a[i])); } }s,w; ///两矩阵相乘 matrix mul(matrix x,matrix y,int n) { matrix c; c.init(n); 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]+=x.a[i][k]*y.a[k][j]; } c.a[i][j] %= 1000; } } return c; } ///快速幂 matrix fastPow(matrix x,int k,int n)///x不要加引用 { matrix c; c.init(n); for(int i=0;i<n;i++)///E c.a[i][i]=1; while(k>0) { if(k&1) c=mul(c,x,n);///注意顺序 x=mul(x,x,n); k>>=1; } return c; } int main() { int n,m,t; while(~scanf("%d%d",&n,&m)&&n+m) { s.init(n); int x,y,k,a,b; for(int i=0;i<m;i++) { scanf("%d%d",&x,&y); s.a[x][y]=1;///有向图 } scanf("%d",&t); for(int i=0;i<t;i++) { scanf("%d%d%d",&a,&b,&k); w=fastPow(s,k,n); printf("%d\n",w.a[a][b]); } } return 0; }
相关文章推荐
- How many ways?? 矩阵快速幂 邻接矩阵意义
- hdu2157 How many ways?? (矩阵快速幂)
- hdu2157 How many ways?? 矩阵快速幂
- hdu2157 How many ways?? 矩阵快速幂
- 【矩阵快速幂】经典题 hdu2157 how many ways、woj642 Lost In WHU
- How many ways?? - hdu2157(矩阵快速幂-模板)
- How many ways??---hdu2157(矩阵快速幂)
- (矩阵快速幂)hdu2157 How many ways??
- hdu2157 How many ways?? (矩阵快速幂)
- HDU 2157 How many ways??(矩阵快速幂)
- HDU 2157 How many ways??(矩阵快速幂)
- hdu 2157 How many ways?? 矩阵快速幂
- HDU 2157 How many ways??(经典矩阵快速幂)
- hdu 2157 How many ways?? 矩阵快速幂
- HDU-2157-How many ways(矩阵快速幂)
- hdu 2157 How many ways?? (矩阵快速幂)
- HDU 2157 How many ways?? 矩阵快速幂求A经过K个点到B方案数
- HDU-2157 - How many ways?? - 矩阵快速幂
- [HDU2157]How many ways??(矩阵乘法)
- HDU 2157 How many ways??(矩阵快速幂)