sdoi 2009 HH去散步 矩阵乘
如果没有题里的“不会立刻沿着刚刚走来的路走回”限制,那么直接矩乘计算k步的方案数
但加了这个限制,就不能以点来矩乘了,考虑边数<=60,如果以边建邻接矩阵呢??
先拆边,再把每一个边和以其终点为起点的边相连,注意不能是拆前的同一条边。
然后矩阵乘喽。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define mod 45989
using namespace std;
int a[122][122],b[122],c[122][122],d[122];
int ans,n,m,t,S,T;
bool bo;
int e=1,head[22];
struct edge{
int u,v,next;
}ed[122];
void add(int u,int v){
ed[e].u=u; ed[e].v=v;
ed[e].next=head[u];
head[u]=e++;
}
void work(int A[122][122],int B[122][122],int C[122][122]){
int D[122][122];
for(int i=1;i<=2*m;i++)
for(int j=1;j<=2*m;j++){
D[i][j]=0;
for(int k=1;k<=2*m;k++)
D[i][j]=(D[i][j]+(A[i][k]*B[k][j])%mod)%mod;
}
for(int i=1;i<=2*m;i++)
for(int j=1;j<=2*m;j++)
C[i][j]=D[i][j];
}
int main()
{
int u,v;
scanf("%d%d%d%d%d",&n,&m,&t,&S,&T); S++; T++;
for(int i=1;i<=m;i++){
scanf("%d%d",&u,&v);
u++; v++;
add(u,v); add(v,u);
}
for(int i=1;i<=2*m;i++)
for(int j=1;j<=2*m;j++){
if(ed[i].v==ed[j].u)
a[i][j]=1;
}
for(int i=1;i<=2*m;i+=2) a[i][i+1]=a[i+1][i]=0;
for(int i=1;i<=2*m;i++) c[i][i]=1; for(int i=head[S];i;i=ed[i].next) b[i]=1;
t--; while(t){
if(t&1) work(a,c,c);
work(a,a,a);
t>>=1;
} for(int i=1;i<=2*m;i++)
for(int j=1;j<=2*m;j++)
d[i]=(d[i]+(b[j]*c[j][i])%mod)%mod; for(int i=1;i<=2*m;i++)
if(ed[i].v==T) ans=(ans+d[i])%mod;
printf("%d\n",ans);
return 0;
}
sdoi 2009 HH去散步 矩阵乘的更多相关文章
- [BZOJ 1875] [SDOI 2009] HH去散步【矩阵乘法】
题目链接:BZOJ - 1875 题目分析: 这道题如果去掉“不会立刻沿着刚刚走来的路走回”的限制,直接用邻接矩阵跑矩阵乘法就可以了.然而现在加了这个限制,建图的方式就要做一些改变.如果我们把每一条边 ...
- [SDOI 2009]HH去散步
Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但 是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又 ...
- bzoj 1875: [SDOI2009]HH去散步 -- 矩阵乘法
1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走, ...
- 洛谷P2151 [SDOI2009] HH去散步 [矩阵加速]
题目传送门 HH去散步 题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走 ...
- 【bzoj1875】[SDOI2009]HH去散步 矩阵乘法
题目描述 一张N个点M条边的无向图,从A走到B,要求:每一次不能立刻沿着上一次的边的反方向返回.求方案数. 输入 第一行:五个整数N,M,t,A,B. N表示学校里的路口的个数 M表示学校里的路的条数 ...
- BZOJ1875 [SDOI2009]HH去散步 矩阵
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1875 题意概括 在一个无向图(有重边无自环)中走,不能在经过连续经过某一条边2次. 现在走t步,问 ...
- [luogu2151 SDOI2009] HH去散步 (矩阵快速幂)
传送门 题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH ...
- [SDOI2009] HH去散步 (矩阵乘法)
link $solution:$ 将边化为点后重新建矩阵,跑$T-1$幂即可(因为跑的是新边). 最后直接找与$x,y$所相连的边即可. #include<iostream> #inclu ...
- 【BZOJ】1875: [SDOI2009]HH去散步 矩阵快速幂
[题意]给定n个点m边的无向图,求A到B恰好经过t条边的路径数,路径须满足每条边都和前一条边不同.n<=20,m<=60,t<=2^30. [算法]矩阵快速幂 [题解]将图的邻接矩阵 ...
随机推荐
- 01_Linux学习_基础知识
学Linux就学命令行 === cd / 转到根目录,相对当前路径 cd dev 转到dev目录 whoami 查阅当前用户 pwd 查阅当前目录 ls 查阅当前目录下的目录和文件 === Linux ...
- 设置eclipse全局编码格式
window--preference--general--workspace--text file encoding
- div学习之div中dl-dt-dd的详解
dl dt dd认识及dl dt dd使用方法 <dl> 标签用于定义列表类型标签. dl dt dd目录 dl dt dd介绍 结构语法 dl dt dd案例 dl dt dd总结 一. ...
- JVM-GC工作原理
配置Garbage Collection 2012-09-17 14:53:18 分类: Java 上面这幅图是我从网络上摘到的,它展现了在一个的理想系统的模型下GC对系统的影响.图的最顶上红色 ...
- Memcache 运行情况
Memcache Memcache是danga.com的一个开源项目,它是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的Hash表,能够用来存储各种格式的数据. 查看当前的me ...
- SpringBoot整合ElasticSearch实现多版本的兼容
前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...
- ruby the diference between gets and gets.chomp()
ruby the diference between gets and gets.chomp() 二者都是可以获取用户命令行输入的函数,但是 gets获取内容后,后面 附带了 多余的换行符号'\n'; ...
- 绕过校园网WEB认证_iodine实现
这篇文章是对我的上一篇文章"绕过校园网WEB认证_dns2tcp实现"的补充,在那篇文章中,我讲述了绕过校园网WEB认证的原理,并介绍了如何在windows系统下绕过校园网WEB认 ...
- Node笔记二
### 安装包的方式安装 - 安装包下载链接: + Mac OSX: [darwin](http://npm.taobao.org/mirrors/node/v5.7.0/node-v5.7.0.pk ...
- UE4中如何使物体始终朝向摄像头?
要使物体始终正面朝向摄像头需要用到一个关键节点:Find Look at Rotation 其中Start连接需要旋转的物体位置矢量,Target连接摄像头位置矢量 最后设置SetActorRotat ...