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. 注解配置springMvc及向作用域中赋值

    1.在applicationContext.xml中配置包扫描器 <!-- 使用注解配置扫描器 --> <context:component-scan base-package=&q ...

  2. AngularJS directive入门例子

    这是<AngularJS>这本书里面提供的一个例子: JS代码: var expanderModule=angular.module('expanderModule', []) expan ...

  3. Tomcat编码问题

    在Tomcat7中,默认URIEncoding="iso8859-1",get请求由于url会完全出现在地址栏,所以传递中文到后台会乱码,需要改成URIEncoding=" ...

  4. win7刷新图标缓存

    建立bat文件 rem 关闭explorer.exetaskkill /f /im explorer.exeattrib -h -i %userprofile%\AppData\Local\IconC ...

  5. double int char 数据类型

    贴心的limits... 测试代码: #include <iostream> #include <stdio.h> #include <limits> #inclu ...

  6. FloatingActionButton增强版,一个按钮跳出多个按钮--第三方开源--FloatingActionButton

      FloatingActionButton项目在github上的主页:https://github.com/futuresimple/android-floating-action-button F ...

  7. Android事件处理--读书笔记

    2013-12-28 17:57:17 1. Android提供了两种方式的事件处理:基于回调和基于监听的事件处理: 1.1 对基于监听的事件处理而言,主要做法是为Android界面组件绑定特定的事件 ...

  8. C++-static的用法

    static成员变量 为什么要有静态成员变量:1)不进入全局名字空间.2)实现信息隐藏 要点: 除了整型的const 静态成员变量可以在类体内初始化,其它值都需要在类体外的实现文件定义 static函 ...

  9. 合理利用 vs2013的性能分析跟诊断

    选择对应的项目==> 我正常是选择采样 就包括里面的一些耗时.  挺好用的. 可以根据热路径 还有访问的占比.知道哪个环节占用的访问时间 还有性能耗能多. 可以点进去 跟踪跟修改

  10. TrueType, OpenType, PCL和PostScript字体版本nterleaved 2 of 5 Barcode Font Advantage Package

    Interleaved 2 of 5 Barcode Font Advantage Package包含了TrueType, OpenType, PCL和PostScript字体版本. 提供了超过30个 ...