题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2157

 

题意:有一个有向图,含有n个节点,m条边,Q个询问,每个询问有 s,t,p,求 s 到 t 经过 p  个点(这 p 个点包括 t 点,不包括 s 点)的所有方案数对100求余; 

 

我们知道floyd算法中(i, j)是可以由(i,k)和(k,j)得到;那么就是经过k这个中间节点;这样一来就是 i -- k -- j  经过两个节点(k,j)所以从 i 到 j 经过2个点的方案总数是  (i,j)= ∑(i,k)*(k,j);(枚举所有的

k )然而这个正是矩阵(A*A)相乘的结果

以此类推经过3个点,4个点...p个点所求就是A^p中的(s, t);

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <map>
#include <vector>
#include <algorithm>
#include <string>
using namespace std; #define N 50
#define MOD 1000
#define met(a, b) memset(a, b, sizeof(a))
#define INF 0x3f3f3f3f typedef long long LL; struct Matrix
{
int a[N][N];
Matrix()
{
memset(a, , sizeof(a));///注意初始化;
}
}; int n, m; Matrix Mul(Matrix p, Matrix q)
{
Matrix temp;///注意初始化; for(int i=; i<n; i++)
{
for(int j=; j<n; j++)
{
for(int k=; k<n; k++)
temp.a[i][j] = (temp.a[i][j] + p.a[i][k]*q.a[k][j]) % MOD;
}
}
return temp;
} Matrix Pow(Matrix Matrix0, int k)
{
Matrix temp, Matrix1 = Matrix0; for(int i=; i<N; i++)
temp.a[i][i] = ;///注意初始化; while(k)
{
if(k% == )
temp = Mul(temp, Matrix1);
Matrix1 = Mul(Matrix1, Matrix1);
k /= ;
}
return temp;
} int main()
{
int u, v, k, Q; while(scanf("%d %d", &n, &m), m+n)
{
Matrix Matrix0; for(int i=; i<=m; i++)
{
scanf("%d %d", &u, &v);
Matrix0.a[u][v] = ;
} scanf("%d", &Q); while(Q--)
{
scanf("%d %d %d", &u, &v, &k); Matrix answer = Pow(Matrix0, k); printf("%d\n", answer.a[u][v]);
}
}
return ;
}

How many ways??---hdu2157(矩阵快速幂)的更多相关文章

  1. hdu2157矩阵快速幂

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

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

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

  3. HDU 2157 How many ways?【矩阵快速幂】

    题目 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的路线 ...

  4. hdu2157之矩阵快速幂

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

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

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

  6. How many ways?? HDU - 2157 矩阵快速幂

    题目描述 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的 ...

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

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

  8. POJ 3734 Blocks (矩阵快速幂)

    题目链接 Description Panda has received an assignment of painting a line of blocks. Since Panda is such ...

  9. 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)

    题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...

  10. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...

随机推荐

  1. 给网站添加X-UA-Compatible标签

    给网站添加X-UA-Compatible标签 方法一:<meta http-equiv="X-UA-Compatible" content="IE=EmulateI ...

  2. 3D游戏与计算机图形学中的数学方法-视截体

    视截体用来表示一个空间的范围,位于这个空间范围内的三维场景的任何物体都可以被看到. 视截体由六个平面围成,其中的四个平面与场景的边界相对应,分别被称为左,右,底,顶视截面.另外两个平面称为近视截面和远 ...

  3. 用json在java和C#之间传递base64的问题。。。

    记录下..唉.... java代码: 导入这个 commons-codec-1.8.jar (下载链接: http://files.cnblogs.com/files/gaocong/jar%E5%8 ...

  4. Oracle Net Manager 服务命名配置以及用PL/SQL 登陆数据库

    我们知道,要连接一个数据库需要知道四个参数: 1. 登陆用户名:user: 2. 登录密码:password: 3. 存放数据库的服务器地址(server_ip)和端口(server_port): 4 ...

  5. xpath的数据和节点类型以及XPath中节点匹配的基本方法

    XPath数据类型  XPath可分为四种数据类型:  节点集(node-set)  节点集是通过路径匹配返回的符合条件的一组节点的集合.其它类型的数据不能转换为节点集.  布尔值(boolean)  ...

  6. 基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 提高Web性能的前端优化技巧总结

  8. 在程序中使用命令行的方式来调用py文件

    做这个主要是程序可以做到直接调用一个脚本,而不是从脚本中把类或者函数import出来这样调用,比如我们写的python命令行文件,让java来调用,让c++来调用,都是可以的.这样不需要整个语言都用p ...

  9. mybatis由浅入深day02_3一对多查询

    3 一对多查询 3.1 需求(查询订单及订单明细的信息) 查询订单及订单明细的信息. 3.2 sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. ...

  10. linux命令之find和locate

    1.find / -name  log.xml   按照名字查找log.xml文件 2.locate log.xml     查找log.xml文件(效率高) 3.grep 'hive'  word. ...