HDU 2157 How many ways?? 题解
题目
春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的路线去教室, 但是由于时间问题, 每次只能经过k个地方, 比方说, 这次葱头决定经过\(2\)个地方, 那他可以先去问鼎广场看看喷泉, 再去教室, 也可以先到体育场跑几圈, 再到教室. 他非常想知道, 从\(A\)点恰好经过\(k\)个点到达\(B\)点的方案数, 当然这个数有可能非常大, 所以你只要输出它模上\(1000\)的余数就可以了. 你能帮帮他么?? 你可决定了葱头一天能看多少校花哦
输入格式
输入数据有多组, 每组的第一行是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的时候输入结束
输出格式
计算每次询问的方案数, 由于走法很多, 输出其对1000取模的结果
输入样例
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
输出格式
2
0
1
3
题解
建立,邻接矩阵\(Matrix\), 则\((Matrix^k)[i][j]\)的值就是从\(i\)到\(j\)经过\(k\)个点的方法数, 所以矩阵乘法+快速幂解决
代码
#include <cstdio>
#include <cstring>
using namespace std;
const int mod = 1000;
struct Matrix {
int data[22][22], row, col;
Matrix operator*(Matrix b) {
Matrix ans(row, b.col);
memset(ans.data, 0, sizeof(ans.data));
for (int i = 0; i < ans.row; i++)
for (int k = 0; k < col; k++)
if (data[i][k])
for (int j = 0; j < ans.col; j++) {
ans.data[i][j] += data[i][k] * b.data[k][j];
ans.data[i][j] %= mod;
}
return ans;
}
Matrix operator^(int k) {
Matrix ans(row, col), self = *this;
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++) ans.data[i][j] = (i == j);
while (k) {
if (k & 1) ans = ans * self;
self = self * self, k >>= 1;
}
return ans;
}
Matrix(int r, int c) {
memset(data, 0, sizeof(data));
row = r, col = c;
}
};
int main() {
int n, m, T, a, b, k;
while (scanf("%d%d", &n, &m), n + m) {
Matrix A(n, n);
while (m--) {
int x, y;
scanf("%d%d", &x, &y);
A.data[x][y] = 1;
}
scanf("%d", &T);
while (T--) {
scanf("%d%d%d", &a, &b, &k);
printf("%d\n", (A ^ k).data[a][b]);
}
}
return 0;
}
HDU 2157 How many ways?? 题解的更多相关文章
- 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 ...
- HDU 2157 How many ways??(简单线性DP | | 矩阵快速幂)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2157 这道题目很多人的题解都是矩阵快速幂写的,矩阵快速幂倒是麻烦了许多了.先给DP的方法 dp[i][ ...
- HDU 2157 How many ways??:矩阵快速幂【i到j共经过k个节点的方法数】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2157 题解: 给你一个有向图,n个节点m条边,问你从i到j共经过k个节点的方法数(不算i点). 题解: ...
- HDU 2157 How many ways?? 临接矩阵+快速幂
Problem Description 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, ...
- HDU 2157 How many ways?? (邻接矩阵快速幂)
http://acm.hdu.edu.cn/showproblem.php?pid=2157 题意 : 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值 从这道题 ...
- Hdu 2157 How many ways??(DP||矩阵乘法)
How many ways?? Time Limit:1000 MS Memory Limit: 32768 K Problem Description 春天到了, HDU校园里开满了花, 姹紫嫣红, ...
- hdu 2157 How many ways?? ——矩阵十题第八题
Problem Description 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, ...
- HDU 2157 How many ways?【矩阵快速幂】
题目 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的路线 ...
- 【传递闭包】HDU 2157 How many ways??
UPD:现在才发现本题是个传递闭包 题目内容 春天到了,HDU校园里开满了花,姹紫嫣红,非常美丽. 葱头是个爱花的人,看着校花校草竞相开放,漫步校园,心情也变得舒畅. 为了多看看这迷人的校园,葱头决定 ...
随机推荐
- tensorflow2.0学习笔记第一章第四节
1.4神经网络实现鸢尾花分类 import tensorflow as tf from sklearn import datasets import pandas as pd import numpy ...
- uni-app热更新
开发工具HbuilderX开发框架 uni-app.h5+1.生成 App 资源升级包1.1.修改版本号1.2.首先,更新 manifest.json 中的版本号.比如之前是 1.0.0,那么新版本应 ...
- Jenkins入门教程(一):Windos下Jenkins的安装教程
Jenkins的安装教程 Jenkins安装前的准备 1.安装jenkins前首先确保你的电脑已经安装了JDK,由于jenkins是基于java开发的 JDK下载地址 2.下载jenkins的安装包 ...
- firda安装和使用
frida是一个轻量级别的hook框架. frida由两部分组成:一部分是运行在系统上的交互工具frida CLI,另一部分是运行在目标机器上的代码注入工具frida-server. 推荐使用pyth ...
- Ubuntu18.04 安装QQ、Tim、微信与win无差异
一.安装deepin-wine环境: 桌面下打开终端,依次输入以下命令 git clone https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu.git ...
- JavaScript触发器
感谢:链接(视频讲解很详细) JavaScript触发器 一.功能 顾名思义就是操控鼠标或键盘触发(实现)一些特定功能. 二.功能实现 <script type="text/javas ...
- Ehab and a 2-operation task【数论思想】
Ehab and a 2-operation task 题目链接(点击) You're given an array aa of length nn. You can perform the foll ...
- vue-toy: 200行代码模拟Vue实现
vue-toy 200行左右代码模拟vue实现,视图渲染部分使用React来代替Snabbdom,欢迎Star. 项目地址:https://github.com/bplok20010/vue-toy ...
- idea Version Control 版本控制窗口/视图显示
原文链接:https://blog.csdn.net/torpidcat/article/details/86471745 显示方式: 或者:
- springboot整合Mybatis(有xml)
pom.xml <!-- mybatis 支持 SpringBoot --> <dependency> <groupId>org.mybatis.spring.bo ...