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系列8之socket
目录 socket 简单的聊天机器人 简单的ftp上传 粘包问题的解决 一. socket模块 socket,俗称套接字,其实就是一个ip地址和端口的组合.类似于这样的形式(ip, port),其中 ...
- ruby File类
类方法 路径相关: File.basename(filename <, suffix>) -> string返回给定文件名 filename 的最后一部分.如果有 suffix 参数 ...
- 【struts2】struts2的使用
1.使用步骤 1) 导入struts2的支持jar包 名称 说明 struts2-core-2.3.4.1.jar Structs2的核心类库 xwork-core-2.3.4.1.jar xwork ...
- grunt in webstorm
1.install grunt sudo npm install -g grunt-cli npm install grunt --save-dev
- 关于 js 对象 转 字符串 和 深拷贝 的探讨
随着更多语言的支持 **json** 作为数据传输和存储的媒体,已经非常成熟且应用广泛.却存在致命硬伤,不携带 **对象方法** .在数据传输和存储中,这是恰当的和合理的. 但是在更多的应用场景中,又 ...
- mutation与vuex区别
vuex- action 1.当点发送过快,页面中渲染的内容与state中的数据不一致,vuex里面的state变得慢,且不持续更新 2.action中是可以做到页面中state中数据保持一致 责 ...
- Vue-router使用
Vue路由:--------------------------------------------------------1 .Vue-rouer入门2 .子路由3 .路由传参4 .多路由区域操作5 ...
- android service笔记
1.service 默认在主线程运行,所以不能在service中直接做访问网络,操作文件等耗时操作,要另外开启线程 2.通过startservice开启的服务,一旦服务开启,这个服务和开启他的调用者之 ...
- 云计算之路-阿里云上:“黑色1秒”问题与2009年Xen一个补丁的故事
在之前对“黑色1秒”问题的分析博文中,我们将最大嫌疑对象锁定在了Xen,在这篇博文我们将从Xen的角度进行分析.也许有人会问,为什么不知道天多高地多厚地去研究不属于自己范围的问题?只因我们对一个问题的 ...
- ACE_Select_Reactor_T 介绍 (2)
本章目录 ACE_Select_Reactor_T 介绍 类继承图 类协作图 类主要成员变量 事件处理函数调用图 事件处理主流程 handle_events 函数流程 handle_events_i ...