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校园里开满了花,姹紫嫣红,非常美丽. 葱头是个爱花的人,看着校花校草竞相开放,漫步校园,心情也变得舒畅. 为了多看看这迷人的校园,葱头决定 ...
随机推荐
- PAT 挖掘机技术哪家强
为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 105 的正整数 N,即参赛人数.随后 N ...
- 04-Python基础3
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...
- mysql常见聚合函数
count():总数量avg():平均数std():标准差sum():求和max():最大值min():最小值 上面的不过多介绍group_concat():分组列值全部展示到一行eg:mysql&g ...
- (八)MySQL事务、视图、变量、存储过程、函数、流程控制结构
补充:增删查改语句在数据库中基本通用,但这篇博客的内容基本是MySQL区别于其它数据库管理系统的知识,也要认真学习. 一.事务 1.含义:在MySQL中,可以通过创建事务来解决一些问题. 2.语法: ...
- 使用nodejs的puppeteer库爬取瓜子二手车网站
const puppeteer = require('puppeteer'); (async () => { const fs = require("fs"); const ...
- GitHub如何回滚代码?
1.git log 查看commit hash值 执行git log:查看commit hash值. 2.执行git reset --hard xxxx xxxx表示的是commit hash 值. ...
- VM virtualBox中文版 v6.0.12.133076官方版(64/-虚拟机
virtualBox中文版 v6.0.12.133076官方版(64/-虚拟机 http://www.onlinedown.net/soft/82464.htm http://8dx.pc6.com/ ...
- vulstack红队评估(一)
一.环境搭建: 1.根据作者公开的靶机信息整理: 虚拟机初始所有统一密码:hongrisec@2019 因为登陆前要修改密码,改为了panda666... 2.虚拟网卡网络配置: ①Win7双 ...
- Azure AD B2C(二)使用Azure AD B2C为ASP.NET Core 应用设置社交帐户(邮箱)登录/注册
一,引言 上次关于Azure AD B2C 讲到一些概念,有介绍到,Azure AD B2C 也是一种身份验证的解决方案,但是它运行客户使用其首选的社交,企业或者本地账户标识对应用程序和API进行单一 ...
- unittest模块在linux报错: AttributeError: module 'unittest' has no attribute 'TestRunner'
一开始在windows下运行没有问题,但是在linux下运行却报如下错误: AttributeError: module 'unittest' has no attribute 'TestRunn ...