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. PHP生成word的三种方式

    摘要: 最近工作遇到关于生成word的问题 现在总结一下生成word的三种方法. btw:好像在博客园发表博客只要是标题带PHP的貌似点击量都不是很高(哥哥我标题还是带上PHP了),不知道为什么,估计 ...

  2. MVC3+EF4.1学习系列(五)----- EF查找导航属性的几种方式

    文章索引和简介 通过上一篇的学习 我们把demo的各种关系终于搭建里起来 以及处理好了如何映射到数据库等问题 但是 只是搭建好了关系 问题还远没有解决 这篇就来写如何查找导航属性 和查找导航属性的几种 ...

  3. C#识别验证码技术-Tesseract

    相信大家在开发一些程序会有识别图片上文字(即所谓的OCR)的需求,比如识别车牌.识别图片格式的商品价格.识别图片格式的邮箱地址等等,当然需求最多的还是识别验证码.如果要完成这些OCR的工作,需要你掌握 ...

  4. springmvc 配置直接访问页面

    <mvc:view-controller path="/" view-name="/home"/> 在mvc中配置,访问路径就可以了

  5. 可滑动的ToggleButton(开关)

    2013-12-28 17:25:01 网上看到一篇关于可滑动的ToogleButton的文章,有代码,觉得挺好,但是不符合我的要求,因此在他的代码基础上改了一些.(作者看到了勿喷啊,实在找不到原文了 ...

  6. [转载]Android 编译环境 build/envsetup.sh分析

    2013-12-23 11:28:40 转载自: http://blog.csdn.net/evilcode/article/details/7005757 请到转载地址阅读原文, 转载以备查询.

  7. Android打开新的Activity并同时关闭当前Activity

    Intent it = new Intent(); it.setClass(EditActivity.this, MainActivity.class); it.setFlags(Intent.FLA ...

  8. jpcap

    1.System.out.println( System.getProperty("java.library.path")); 2.将jpcap.dll放到上边打印的路径中

  9. 从协议VersionedProtocol开始2——ClientDatanodeProtocol和InterDatanodeProtocol

    1.首先,我看的是hadoop1.2.1 这个里边,有点奇怪ClientDatanodeProtocol的versionID是4,但是InterDatanodeProtocol的versionID是3 ...

  10. VC单文档对话框添加托盘图标

    一 单文档添加托盘 1. 在CMainFrame中定义NOTIFYICONDATA结构m_notify 2.在OnCreate中添加托盘初始化代码 int CMainFrame::OnCreate(L ...