UPD:现在才发现本题是个传递闭包

题目内容

春天到了,HDU校园里开满了花,姹紫嫣红,非常美丽. 葱头是个爱花的人,看着校花校草竞相开放,漫步校园,心情也变得舒畅. 为了多看看这迷人的校园,葱头决定,每次上课都走不同的路线去教室,但是由于时间问题,每次只能经过\(k\)个地方,比方说,这次葱头决定经过2个地方,那他可以先去问鼎广场看看喷泉,再去教室,也可以先到体育场跑几圈,再到教室. 他非常想知道,从A 点恰好经过\(k\)个点到达B点的方案数,当然这个数有可能非常大,所以你只要输出它模上1000的余数就可以了. 你能帮帮他么?? 你可决定了葱头一天能看多少校花哦。

输入格式

输入数据有多组,每组的第一行是2个整数\(n,m\)(\(0 < n \le 20,m \le 100\)) 表示校园内共有\(n\)个点,为了方便起见,点从\(0\)到\(n-1\)编号,接着有\(m\)行,每行有两个整数$ s,t $(\(0\le s,t<n\)) 表示从\(s\)点能到\(t\)点,注意图是有向的.接着的一行是两个整数\(T\),表示有\(T\)组询问(\(1\le T\le 100\))。

接下来的\(T\)行,每行有三个整数$ A,B,k\(,表示问你从A点到B点恰好经过\)k\(个点的方案数(\)k < 20$),可以走重复边。如果不存在这样的走法,则输出\(0\)。

当\(n,m\)都为\(0\)的时候输入结束

输出格式

计算每次询问的方案数,由于走法很多,输出其对1000取模的结果

样例输入

(??)

1 2

2 8

样例输出

4

()()

思路

令\(Mat[i][j]=1\),表示从\(i\)到\(j\)连通,即\(i,j\)经过一个点到达的方案数为1。那么\(∑(M[i][k] + M[k][j])\),\(k∈(0, N-1)\), 就表示\(i,j\)经过两个点到达的方案数。即将矩阵\(Mat^n\)就可以求出\(i,j\)经过要求个数个点到达的方案数。

代码

#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
const int mod=1000;
int T,n,m; struct Mat{
int mat[40][40];
Mat(){
memset(mat,0,sizeof(mat));
}
}; Mat mul(Mat A,Mat B){
Mat C;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
(C.mat[i][j]+=A.mat[i][k]*B.mat[k][j])%=mod;
}
}
}
return C;
} Mat qpow(Mat A,int k) {
Mat B;
for(int i=1;i<=n;i++)
B.mat[i][i]=1;
while(k){
if(k&1)
B=mul(B,A);
A=mul(A,A);
k>>=1;
}
return B;
} int main(){
int s,t;
while(1){
scanf("%d%d",&n,&m);
if(n==0&&m==0)return 0; Mat A,B;
while(m--){
scanf("%d%d",&s,&t);
A.mat[++s][++t]=1;//因为不想从0开始循环就+1了
} scanf("%d",&T);
while (T--){
int x,y,k;
scanf("%d%d%d",&x,&y,&k);
B=A;
B=qpow(A,k);
printf("%d\n",B.mat[++x][++y]);
}
}
return 0;
}

【传递闭包】HDU 2157 How many ways??的更多相关文章

  1. 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 ...

  2. HDU 2157 How many ways?? (邻接矩阵快速幂)

    http://acm.hdu.edu.cn/showproblem.php?pid=2157 题意 : 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值   从这道题 ...

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

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

  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??(DP||矩阵乘法)

    How many ways?? Time Limit:1000 MS Memory Limit: 32768 K Problem Description 春天到了, HDU校园里开满了花, 姹紫嫣红, ...

  6. HDU 2157 How many ways?? 临接矩阵+快速幂

    Problem Description 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, ...

  7. hdu 2157 How many ways?? ——矩阵十题第八题

    Problem Description 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, ...

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

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

  9. HDU 2157 How many ways?? 题解

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

随机推荐

  1. PHP生成二维码 endroid/qr-code 扩展包

    目录 1. 引入 endroid/qr-code 扩展包 2. 使用示例 3. 二维码中放入logo,无法识别二维码的问题 1. 引入 endroid/qr-code 扩展包 https://pack ...

  2. 关于HTML基本标签,了解一下!

    目录 1 前言 2 正文 2.1 HTML文档结构 2.1.1 html标签 2.1.2 head标签 2.1.3 title标签 2.1.4 body标签 2.2 HTML常用标签 2.2.1 换行 ...

  3. 5 分钟带你掌握 Makefile 分析

    摘要:Makefile是一个名为GNU-Make软件所需要的脚本文件,该脚本文件可以指导Make软件控制arm-gcc等工具链去编译工程文件最终得到可执行文件,几乎所有的Linux发行版都内置了GNU ...

  4. python中的n次方表示法 **n

    例题:计算2的n次方,n由用户输入(N次方用**表示)# n=eval(input('手动输入n的值:')) #个人感觉,不确定是int还是float时,用eval来表示,eval后面接表达式# pr ...

  5. Windows10 安装 CUDA + cuDNN + pyTorch

    2020/5/29 在 windows10 上面安装 CUDA 和 cuDNN 0.简单了解一下 CUDA 和 cuDNN 1)什么是 CUDA CUDA(ComputeUnified Device ...

  6. js中的鼠标滚轮事件

    ## 事件对象 event 1 event事件对象,表示用来获取事件的详细信息,比如得到鼠标的横坐标:事件对象.clientX(clientX是可视区坐标) window.onclick = func ...

  7. Js获取某个节点的类名

    1. document.querySelectorAll(".style-color")[0].getAttribute("class")   2. $('.s ...

  8. springboot中图标的定制

    因为我用的版本是org.springframework.boot spring-boot-starter-parent 2.3.3.RELEASE 第一种方法: 配置一个application.yml ...

  9. 缓动公式整理(附:C#实现及WPF原版对比)

    前言 缓动在动画效果中应用非常广泛,在合适的时候使用一些缓动效果会使得效果更加符合人的直观感受,简单来说,会显得更加自然. WPF提供了11种缓动效果,涵盖了大部分的使用场景.不过如果需要在非WPF下 ...

  10. jquery学习:

    1.什么是jQuery jquery 全称 javaScript Query.是js的一个框架.本质上仍然是js. 2.jQuery的特点 支持各种主流的浏览器. 使用特别简单 拥有便捷的插件扩展机制 ...