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. pytest132个命令行参数用法

    在Shell执行pytest -h可以看到pytest的命令行参数有这10大类,共132个 序号 类别 中文名 包含命令行参数数量 1 positional arguments 形参 1 2 gene ...

  2. 添加到web.config文件里的用户自定义翻页控件

    <pages> <controls> <add tagPrefix="ucl" tagName="Pager_Backstage" ...

  3. My97DatePicker时间控件使用方法

    引入css及js <asp:TextBox ID="tb_startTime" runat="server" CssClass="Wdate&q ...

  4. ansible中定义变量的若干方法

    Ansible支持十几种定义变量的方式 根据优先级排序的定义方式: Inventory变量 Host Facts变量 Playbook变量 Playbook提示变量 变量文件 命令行变量 1.Inve ...

  5. JumpServer 架构浅解

    Jumpserver 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能.基于ssh协议来管理,客户端无需安装agent.完全开源,GPL授权 设计思路 设计一个跳转网关,所有 ...

  6. adb连接手机

    1. 通过wifi, 利用adb来连接手机. 在pc的cmd中输入命令: adb connect 192.168.1.100 其中adb就是手机的ip. 如果连接成功, 就可以进入android的sh ...

  7. .Net EF 学习之model first

    新建一个控制台项目,然后点击添加新建项,选择ADO.Net 实体数据模型 选择空模型 右击设计器,新增,实体 右击新增,标量属性, 右侧可以设置最大长度和一些属性信息: 建好对象后右击根据模型生成数据 ...

  8. 【好消息】博客迁移到github,求关注,求star,求支持

    博客迁移到github 地址:https://github.com/dirkhe1051931999/hjBlog

  9. 云计算openstack核心组件——keystone身份认证服务(5)

    一.Keystone介绍:       keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户 ...

  10. hystrix文档翻译之metrics

     metrics和监控 动机 HystrixCommands和HystrixObservableCommands执行过程中会产生相关运行情况的metrics.这些metrics对于监控系统表现有很大的 ...