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有个一成不变的习惯,喜欢饭后百步走.所谓百步走, ...
随机推荐
- 2.3 进程控制之exec函数族
学习目标:学习使用exec函数族的重要的几个函数 一.引言 进程通过exec函数根据指定的文件名或目录名执行另一个可执行文件,当进程调用exec函数时,该进程的数据段.代码段和堆栈段完全被新程序替换 ...
- 关于mysql连接时候出现"error 2003: can't connect to mysql server on 'localhost'(10061)问题的解决
天,在使用navicat Premium 连接数据库时,出现了一个弹出窗口显示: "error 2003: can't connect to mysql server on 'localho ...
- Kubernetes-深入分析集群安全机制
Kubernetes过一系列机制来实现集群的安全机制,包括API Server的认证授权.准入控制机制及保护敏感信息的Secret机制等.集群的安全性必须考虑以下的几个目标: 保证容器与其所在宿主机的 ...
- python2.7练习小例子(二十五)
25):题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后问第一个人,他 ...
- Union-find 并查集
解决问题 给一系列对点0~N-1的连接,判断某两个点p与q是否相连. private int[] id; // 判断p和q是否属于同一个连通分量 public boolean connected(in ...
- 字符串分割(C++)
一.用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串. 参数说明:str为要分解的字符串, ...
- ibatis常用sql
(1) 输入参数为单个值 <delete id="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore" p ...
- Android应用AsyncTask处理机制详解及源码分析
1 背景 Android异步处理机制一直都是Android的一个核心,也是应用工程师面试的一个知识点.前面我们分析了Handler异步机制原理(不了解的可以阅读我的<Android异步消息处理机 ...
- 适用于Linux的windows子系统
Windows基于图形界面的易用性是有目共睹的,这也是很多普通用户往往难以舍弃的原因.但是Linux系统更强大的网络应用开发能力,却又是Windows系统所无法比拟的.一直以来,很多人都在试图采用各种 ...
- CSP201409-1:相邻数对
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...