http://acm.hdu.edu.cn/showproblem.php?pid=2157

求A到B经过K个点的方案数

http://www.matrix67.com/blog/archives/276  这里面的经典问题8

存图的邻接矩阵自乘k次,得到的新矩阵A行B列就是答案

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std ; #define Matr 105 //矩阵大小,注意能小就小 struct mat//矩阵结构体,a表示内容,r行c列 矩阵从1开始
{
int a[Matr][Matr];
int r,c;
mat()
{
r=c=;
memset(a,,sizeof(a));
}
};
void print(mat m)
{
int i,j;
//printf("%d\n",m.size);
for(i=;i<m.r;i++)
{
for(j=;j<m.c;j++)printf("%d ",m.a[i][j]);
printf("\n");
}
} mat mul(mat m1,mat m2,int mod)
{
mat ans=mat();ans.r=m1.r;ans.c=m2.c;
for(int i=;i<=m1.r;i++)
for(int j=;j<=m2.r;j++)
if(m1.a[i][j])
for(int k=;k<=m2.c;k++)
ans.a[i][k]=(ans.a[i][k]+m1.a[i][j]*m2.a[j][k])%mod;
return ans;
}
mat quickmul(mat m,int n,int mod)
{
mat ans=mat();
int i;
for(i=;i<=m.r;i++)ans.a[i][i]=;
ans.r=m.r;ans.c=m.c;
while(n)
{
if(n&)ans=mul(m,ans,mod);
m=mul(m,m,mod);
n>>=;
}
return ans;
}
/*
ans^=n ->
mat ans=mat();
ans.r=R;ans.c=C;
初始化ans矩阵
ans=quickmul(ans,n,mod);
*/ int main()
{
int n,m ;
while(~scanf("%d%d",&n,&m))
{
if(!n && !m)break ;
mat M=mat() ;
M.r=n ;M.c=n ;
while(m--)
{
int a,b ;
scanf("%d%d",&a,&b) ;
M.a[a+][b+]= ;
}
int T ;
scanf("%d",&T) ;
while(T--)
{
int a,b,k ;
scanf("%d%d%d",&a,&b,&k) ;
mat res=quickmul(M,k,) ;
printf("%d\n",res.a[a+][b+]) ;
}
}
return ;
}

HDU 2157的更多相关文章

  1. HDU 2157 How many ways?? (邻接矩阵快速幂)

    http://acm.hdu.edu.cn/showproblem.php?pid=2157 题意 : 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值   从这道题 ...

  2. HDU 2157 How many ways??(简单线性DP | | 矩阵快速幂)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2157 这道题目很多人的题解都是矩阵快速幂写的,矩阵快速幂倒是麻烦了许多了.先给DP的方法 dp[i][ ...

  3. HDU 2157 How many ways?? 【矩阵经典8】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=2157 How many ways?? Time Limit: 2000/1000 MS (Java/Ot ...

  4. HDU 2157 How many ways??:矩阵快速幂【i到j共经过k个节点的方法数】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2157 题解: 给你一个有向图,n个节点m条边,问你从i到j共经过k个节点的方法数(不算i点). 题解: ...

  5. HDU 2157(矩阵快速幂)题解

    How many ways?? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. HDU 2157 矩阵幂orDP

    How many ways?? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  7. HDU 2157 How many ways?? 临接矩阵+快速幂

    Problem Description 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, ...

  8. hdu 2157 How many ways?? ——矩阵十题第八题

    Problem Description 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, ...

  9. Hdu 2157 How many ways??(DP||矩阵乘法)

    How many ways?? Time Limit:1000 MS Memory Limit: 32768 K Problem Description 春天到了, HDU校园里开满了花, 姹紫嫣红, ...

随机推荐

  1. Java 之 I/O 系列 01 ——基础

    Java 之 I/O 系列 目录 Java 之 I/O 系列 01 ——基础 Java 之 I/O 系列 02 ——序列化(一) Java 之 I/O 系列 02 ——序列化(二) 整理<疯狂j ...

  2. 支持向量机的smo算法(MATLAB code)

    建立smo.m % function [alpha,bias] = smo(X, y, C, tol) function model = smo(X, y, C, tol) % SMO: SMO al ...

  3. ASP.NET Web API路由规

    默认的规则 在ASP.NET MVC4中 global.asax.cs代码中并无注册默认路由规则的代码 代码如下: public class WebApiApplication : System.We ...

  4. Spring对事务的处理

    1.加入spring-jdbc.jar包 2.配置数据源 3.配置spring事务管理器,spring的事务出现在业务层. <bean id="dataSource" cla ...

  5. spark 学习

    三种编译方式 1. 编译文档:more—>buiding spark 2. 三种编译方式:SBT,Maven,打包编译 make-distribution.sh 运行方式 local,stand ...

  6. 使用MediaRecorder录制音频

    手机一般都提供了麦克风硬件,而Android系统就可以利用该硬件来录制音频了. 为了在Android应用中录制音频,Android提供了MediaRecorder类,使用MediaRecorder录制 ...

  7. Js练习题之字符串转驼峰

    如border-bottom-color =>borderBottomColor 传传统方法 分析: 1.转大写,需要用到字符串的toUpperCase()方法 2.去掉-,需要用到字符串方法s ...

  8. web api control注册及重写DefaultHttpControllerSelector、ApiControllerActionSelector、ApiControllerActionInvoker

    namespace EWorkpal.WebApi { public class HttpNotFoundDefaultHttpControllerSelector : DefaultHttpCont ...

  9. HDU 1098 Ignatius's puzzle 费马小定理+扩展欧几里德算法

    题目大意: 给定k,找到一个满足的a使任意的x都满足 f(x)=5*x^13+13*x^5+k*a*x 被65整除 推证: f(x) = (5*x^12 + 13 * x^4 + ak) * x 因为 ...

  10. Program D--贪心-区间覆盖

    Given several segments of line (int the X axis) with coordinates [Li,Ri]. You are to choose the mini ...