1875: [SDOI2009]HH去散步
Time Limit: 20 Sec Memory Limit: 64 MB
Submit: 2333 Solved: 1204
[Submit][Status][Discuss]
Description
HH有个一成不变的习惯,喜欢饭后百步走。所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离。 但
是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回。 又因为HH是个喜欢变化的人,所以他每
天走过的路径都不完全一样,他想知道他究竟有多 少种散步的方法。 现在给你学校的地图(假设每条路的长度都
是一样的都是1),问长度为t,从给定地 点A走到给定地点B共有多少条符合条件的路径
Input
第一行:五个整数N,M,t,A,B。
N表示学校里的路口的个数
M表示学校里的 路的条数
t表示HH想要散步的距离
A表示散步的出发点
B则表示散步的终点。
接下来M行
每行一组Ai,Bi,表示从路口Ai到路口Bi有一条路。
数据保证Ai != Bi,但不保证任意两个路口之间至多只有一条路相连接。
路口编号从0到N -1。
同一行内所有数据均由一个空格隔开,行首行尾没有多余空格。没有多余空行。
答案模45989。
N ≤ 20,M ≤ 60,t ≤ 2^30,0 ≤ A,B
Output
一行,表示答案。
Sample Input
4 5 3 0 0
0 1
0 2
0 3
2 1
3 2
Sample Output
4
不能沿着刚刚走来的路走回
然后就很烦啊
解决方案:把双向边拆成两条单向边后按边建矩阵就不会走回去啦啦啦(≧▽≦)/
#include<iostream>
#include<cstdio>
#define M 45989
#define LL long long
using namespace std;
int i,m,n,j,k,a,b,t, x,y,s[1000][2],ans;
struct vv
{
int g[200][200];
} ch,f,cs,l;
vv cheng(vv a,vv b)
{
vv d=ch;
for(int i=1;i<=m+m;i++)
for(int j=1;j<=m+m;j++)
for(int k=1;k<=m+m;k++)
d.g[i][j]=(int)(d.g[i][j]+(LL)a.g[i][k]*b.g[k][j])%M;
return d;
}
vv ksm(vv a,int x)
{
vv c=cs;
for(x;x>1;x>>=1)
{
if(x&1) c=cheng(c,a);
vv v=cheng(a,a);
a=v;
}
return cheng(a,c);
}
int main()
{
scanf("%d%d%d%d%d",&n,&m,&t,&a,&b);
for(i=1;i<=m+m;i++) cs.g[i][i]=1;
for(i=1;i<=m;i++) scanf("%d%d",&s[i][0],&s[i][1]), s[i+m][0]=s[i][1], s[i+m][1]=s[i][0];
for(i=1;i<=m+m;i++)
for(j=1;j<=m+m;j++)
if(s[i][1]==s[j][0] && i-j!=m && j-i!=m) f.g[i][j]=1;
vv d=ksm(f,t-1);
for(i=1;i<=m+m;i++)
if(s[i][0]==a) l.g[1][i]=1;
l=cheng(l,d);
for(i=1;i<=m+m;i++) if(s[i][1]==b) ans=(ans+l.g[1][i])%M;
printf("%d",ans);
}
1875: [SDOI2009]HH去散步的更多相关文章
- BZOJ 1875: [SDOI2009]HH去散步( dp + 矩阵快速幂 )
把双向边拆成2条单向边, 用边来转移...然后矩阵乘法+快速幂优化 ------------------------------------------------------------------ ...
- bzoj 1875: [SDOI2009]HH去散步 -- 矩阵乘法
1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走, ...
- bzoj 1875 [SDOI2009]HH去散步(矩乘)
Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因 ...
- bzoj 1875: [SDOI2009]HH去散步
Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但 是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又 ...
- 1875. [SDOI2009]HH去散步【矩阵乘法】
Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但 是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又 ...
- 【BZOJ】1875: [SDOI2009]HH去散步
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1875 注意的是路径不可以重复,所以这题把边看成点.每一条无向边拆成两条有向边. 令${F[ ...
- BZOJ 1875: [SDOI2009]HH去散步(矩阵乘法)
首先,题意就把我们引向了矩阵乘法,注意边长m<=60,那么就按边建图,变成一个120个点的图,然后乱搞就行了。 PS:WA了N久改了3次终于A了QAQ CODE: #include<cst ...
- BZOJ.1875.[SDOI2009]HH去散步(DP 矩阵乘法)
题目链接 比较容易想到用f[i][j]表示走了i步后到达j点的方案数,但是题目要求不能走上一条走过的边 如果这样表示是不好转移的 可以考虑边,f[i][j]表示走了i步后到达第j条边的方案数,那么有 ...
- 【BZOJ】1875: [SDOI2009]HH去散步 矩阵快速幂
[题意]给定n个点m边的无向图,求A到B恰好经过t条边的路径数,路径须满足每条边都和前一条边不同.n<=20,m<=60,t<=2^30. [算法]矩阵快速幂 [题解]将图的邻接矩阵 ...
随机推荐
- ipV4&V6的区别
1. 更大的地址空间.IPv4中规定IP地址长度为32,即有2^32-1个地址:而IPv6中IP地址的长度为128,即有2^128-1个地址. 2. 更小的路由表.IPv6的地址分配一开始就遵循聚类( ...
- IDEA相关设置
今天终于放弃了MyEclipse,在使用MyEclipse中的各种心酸就不多说,总结成一句话就是:珍爱生命,远离MyEclipse. 换到IDEA后,安装了IdeaVim插件,支持vim的操作,提高的 ...
- oracle序列的创建和使用
oracle 序列的创建与使用 (2012-03-15 16:14:09) -------------------------------------------------------------- ...
- 区分IE8/IE7/IE6及其他浏览器-CSS “\9″
区分IE8/IE7/IE6及其他浏览器-CSS “\9″ 原创文章,转载请注明来自张鑫旭-鑫空间-鑫生活[http://www.zhangxinxu.com] by zhangxinxu from h ...
- Code Signal_练习题_shapeArea
A 1-interesting polygon is just a square with a side of length 1. An n-interesting polygon is obtain ...
- 【PyQt5 学习记录】007:改变窗口样式之一
class MainWindow(QMainWindow): 2 def __init__(self, parent=None): 3 super(MainWindow, self).__init__ ...
- jQuery基础(DOM篇,append(),after(),prepend(),insertAfter(),节点删除,遍历方法each())
1.DOM创建节点及节点属性 创建流程比较简单,大体如下: - 创建节点(常见的:元素.属性和文本) - 添加节点的一些属性 - 加入到文档中 流程中涉及的一点方法: - 创建元素:d ...
- box-sizing 属性
box-sizing属性可以为三个值: content-box,border和padding不计算入width之内 padding-box,padding计算入width内 border-box,bo ...
- samba 使用tips
安装: 推荐使用新立德包管理器安装 SAMBA配置文件: /etc/samba/smb.conf Samba服务器的启动与关闭: sudo /etc/init.d/smbd start ubuntu访 ...
- chrome 浏览器调用 ocx 插件
原文:http://blog.csdn.net/wangchao1988ok/article/details/45193489 IE 上使用 ocx 插件网上已经有很多资料说明,这里就不重复了,那如何 ...