BZOJ1875: [SDOI2009]HH去散步 图上边矩乘
这道题十分的坑……
我作为一只连矩乘都不太会的渣渣看到这道题就只能神搜了…..
首先说一下普通的矩乘求方案,就是高出邻接矩阵然后一顿快速幂…..
矩乘一般就是一些秘制递推…..
再说一下这道题,我们可以看出这小骚题有个条件就是说,不能立刻回头,这就不能用以往的了,以往的前后顺序无关,在矩阵里放的是:f[i][j]就是说第i个状态可以由第j个状态转移而来,那么我们可以看出若这个边为无向边,那么对于->*来说这个->东西可以无脑转移到*,因为*是->的合法状态也是唯几合法状态…..
最后的答案把->到B的加起来就好了…….
#include<cstdio>
#include<cstring>
#define N 25
#define M 65
#define P 45989
using namespace std;
inline int read()
{
int sum=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
int a[M<<][M<<],b[M<<];
int n,m,T,A,B;
struct Tr
{
int to,next,id;
}c[M<<];
int head[N],t;
inline void add(int x,int y)
{
c[++t].to=y;
c[t].next=head[x];
c[t].id=t;
head[x]=t;
}
bool En[M<<];
inline void look()
{
printf("LET US SEE B\n");
for(int i=;i<=(m<<);i++)
printf(" %d ",b[i]);
printf("\n");
}
inline void Init()
{
n=read(),m=read(),T=read(),A=read()+,B=read()+;
for(int i=;i<=m;i++)
{
int x=read()+,y=read()+;
add(x,y),add(y,x);
}
for(int x=;x<=n;x++)
{
for(int i=head[x];i;i=c[i].next)
{
int y=c[i].to;
if(y==B)En[c[i].id]=;
int caocaocao=;
for(int j=head[y];j;j=c[j].next)
{
if(c[j].to==x)
caocaocao++;
if(c[j].to!=x||(c[j].to==x&&caocaocao!=))
a[c[j].id][c[i].id]=;
}
}
}
for(int i=head[A];i;i=c[i].next)
b[c[i].id]=;
}
int temp[M<<][M<<],d[M<<];
inline void up()
{
memset(d,,sizeof(d));
for(int i=;i<=(m<<);i++)
for(int j=;j<=(m<<);j++)
d[i]+=a[i][j]*b[j]%P;
for(int i=;i<=(m<<);i++)
b[i]=d[i]%P;
}
inline void multi()
{
memset(temp,,sizeof(temp));
for(int i=;i<=(m<<);i++)
for(int j=;j<=(m<<);j++)
for(int k=;k<=(m<<);k++)
temp[i][j]+=a[i][k]*a[k][j]%P;
for(int i=;i<=(m<<);i++)
for(int j=;j<=(m<<);j++)
a[i][j]=temp[i][j]%P;
}
inline void work()
{
T=T-;
while(T)
{
//look();
if(T&)up();
T>>=;
multi();
}
int ans=;
for(int i=;i<=(m<<);i++)
if(En[i])
ans+=b[i];
ans%=P;
printf("%d",ans);
}
int main()
{
Init();
if(T==)
{
if(A==B)printf("");
else printf("");
return ;
}
work();
return ;
}
BZOJ1875: [SDOI2009]HH去散步 图上边矩乘的更多相关文章
- bzoj1875: [SDOI2009]HH去散步
终于A了...早上按自己以前的写法一直WA.下午换了一种写法就A了qwq #include<cstdio> #include<cstring> #include<iost ...
- [难题题解] [BZOJ1875] [SDOI2009] HH去散步
题目H有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是个喜欢变化的人 ...
- BZOJ1875 [SDOI2009]HH去散步 矩阵
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1875 题意概括 在一个无向图(有重边无自环)中走,不能在经过连续经过某一条边2次. 现在走t步,问 ...
- BZOJ1875 [SDOI2009]HH去散步 【dp + 矩阵优化】
题目 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但 是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是个喜欢变 ...
- 【题解】 bzoj1875: [SDOI2009]HH去散步 (动态规划+矩阵乘法)
bzoj1875,懒得复制,戳我戳我 Solution: 看到这道题,看的出是个dp,每个点\(t\)时刻到达的方案数等于\(t-1\)到连过来的点方案数之和 但又因为题目有要求不能走一样的边回去不是 ...
- [bzoj1875][SDOI2009] HH去散步 [dp+矩阵快速幂]
题面 传送门 正文 其实就是让你求有多少条长度为t的路径,但是有一个特殊条件:不能走过一条边以后又立刻反着走一次(如果两次经过同意条边中间隔了别的边是可以的) 如果没有这个特殊条件,我们很容易想到dp ...
- bzoj1875 [SDOI2009]HH去散步——矩阵快速幂
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1875 有个限制是不能走回头路,比较麻烦: 所以把矩阵中的元素设成边的经过次数,单向边之间就好 ...
- bzoj1875 [SDOI2009]HH去散步 矩阵快速幂
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1875 题解 如果没有这个"不能立刻沿着刚刚走来的路走回",那么这个题就是一 ...
- bzoj 1875: [SDOI2009]HH去散步 -- 矩阵乘法
1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走, ...
随机推荐
- python网络编程,通过服务名称和会话类型(tcp,udp)获取端口号,简单的异常处理
作为一个php程序员,同时有对网络方面感兴趣,php就比较蛋疼了,所以就抽了些时间看python 之前学python基础因为工作原因,断断续续的看了个基础,差不多是可以写代码了 最近在看<pyt ...
- ruby随机生成字符串
随机生成一个固定位数的字符串: def newpass( len ) chars = (").to_a newpass = "" 1.upto(len) { |i| ne ...
- linux实验-基本指令1
1.root帐号登录,查看/tmp目录,如果/tmp目录下没有子目录myshare,则建立该目录. 2.创建帐号testuser. 3.把myshare目录及其目录下的所有文件和子目录的拥有者该为te ...
- System.Speech使用
使用微软语音库 使用微软语音库可以很快速的制作一个小应用,比如一个唐诗的朗诵工具.本示例也是使用微软语音库,制作了一个唐诗宋词朗诵的应用,仅供加深学习印象 首先是要引入System.Speech库 然 ...
- 开启一个项目如何上传到git
1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 git init 2.把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点 ...
- Delphi7目录结构----初学者参考
打开Delphi的安装目录,如C:\Program Files\Borland\Delphi7,你将会看到目录下包含了一些文件和文件夹: ² Source:存放的是Delpi提供的所有源 ...
- mcrouter facebook 开源的企业级memcached代理
原文地址:https://code.facebook.com/posts/296442737213493/introducing-mcrouter-a-memcached-protocol-route ...
- mybatis <collection>标签 类型为string时无法获取重复数据错误
1.场景: fyq_share_house 表 和 fyq_sh_tag 表 两张表是一对多的关系, 一个楼盘对应多个标签,在实体类ShareHouse中使用 /** * 楼盘标签 */ privat ...
- 初探Qt Opengl【1】
最近一直在学习Qt的opengl绘图,看到好多资源都是关于以前的旧版本的, 我将我这几天学的的部分关于opengl的做个总结,也希望对需要学习的人有一定的帮助 在我的学习中,我主要用到一下三个方法 # ...
- CSP201503-1:图像旋转
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...