1875. [SDOI2009]HH去散步【矩阵乘法】
Description
Input
Output
一行,表示答案。
Sample Input
0 1
0 2
0 3
2 1
3 2
Sample Output
4
第一道矩阵乘法……orz调了半天发现自己犯了一个傻逼错误
多余的不解释了,学习笔记里有思路。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define MOD (45989)
using namespace std;
struct Mar
{
int a[][];
} unit,G;
struct node1
{
int to,next;
} edge[];
int n,head[],num_edge; void add(int u,int v)
{
edge[num_edge].to=v;
edge[num_edge].next=head[u];
head[u]=num_edge++;
} Mar Mul(Mar x,Mar y)
{
Mar c;
memset(c.a,,sizeof(c.a));//初始化,不然会GG
for (int i=; i<=num_edge-; ++i)
for (int j=; j<=num_edge-; ++j)
for (int k=; k<=num_edge-; ++k)
c.a[i][j]=(c.a[i][j]+x.a[i][k]*y.a[k][j])%MOD;
return c;
} Mar Mar_pow(Mar a,int p)
{
Mar ans=unit;
while (p!=)
{
if (p&)
ans=Mul(ans,a);
a=Mul(a,a);
p>>=;
}
return ans;
} int main()
{
int m,t,st,ed,u,v;
scanf("%d%d%d%d%d",&n,&m,&t,&st,&ed);
++st;++ed;
for (int i=; i<=n; ++i) head[i]=-;
for (int i=; i<=m; ++i)
{
scanf("%d%d",&u,&v);
++u;++v;
add(u,v);add(v,u);
}
for (int i=; i<=num_edge-; ++i)
unit.a[i][i]=;//给单位矩阵赋值
for (int i=; i<=num_edge-; ++i)
for (int j=head[edge[i].to]; j!=-; j=edge[j].next)
if ((i!=(j^)))
G.a[i][j]++; G=Mar_pow(G,t-);
int Final=;
for (int i=head[st]; i!=-; i=edge[i].next)
for (int j=head[ed]; j!=-; j=edge[j].next)
Final=(Final+G.a[i][j^])%MOD;//异或就是将二进制最后一位取反,即入边变出边,出边变入边
printf("%d",Final);
}
1875. [SDOI2009]HH去散步【矩阵乘法】的更多相关文章
- bzoj 1875: [SDOI2009]HH去散步 -- 矩阵乘法
1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走, ...
- 【bzoj1875】[SDOI2009]HH去散步 矩阵乘法
题目描述 一张N个点M条边的无向图,从A走到B,要求:每一次不能立刻沿着上一次的边的反方向返回.求方案数. 输入 第一行:五个整数N,M,t,A,B. N表示学校里的路口的个数 M表示学校里的路的条数 ...
- [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. [算法]矩阵快速幂 [题解]将图的邻接矩阵 ...
- BZOJ 1875: [SDOI2009]HH去散步( dp + 矩阵快速幂 )
把双向边拆成2条单向边, 用边来转移...然后矩阵乘法+快速幂优化 ------------------------------------------------------------------ ...
- 洛谷P2151 [SDOI2009] HH去散步 [矩阵加速]
题目传送门 HH去散步 题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走 ...
- BZOJ 1875: [SDOI2009]HH去散步(矩阵乘法)
首先,题意就把我们引向了矩阵乘法,注意边长m<=60,那么就按边建图,变成一个120个点的图,然后乱搞就行了。 PS:WA了N久改了3次终于A了QAQ CODE: #include<cst ...
- bzoj 1875 [SDOI2009]HH去散步(矩乘)
Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因 ...
- bzoj1875 [SDOI2009]HH去散步 矩阵快速幂
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1875 题解 如果没有这个"不能立刻沿着刚刚走来的路走回",那么这个题就是一 ...
随机推荐
- 如鹏网学习笔记(四).Net常用类库
.Net常用类库 一.String成员方法(常用) 1,bool Contains(string str) 判断字符串对象是否包含给定的内容 2,bool StartsWith(String str) ...
- 由表生成代码:mybatis-generator入门
application.properties ## mapper xml 文件地址 mybatis.mapper-locations=classpath*:mapper/*Mapper.xml ##数 ...
- 师范大学 e: skyscrapers
#include<iostream> #include<stdio.h> #include<cstring> #include<cstdlib> usi ...
- 【学习笔记】--- 老男孩学Python,day14 python内置函数大全
参考: https://www.cnblogs.com/pyyu/p/6702896.html http://www.runoob.com/python3/python3-built-in-func ...
- AE三维点击查询(3D Identify)的实现(转)
AE三维点击查询(3D Identify)的实现,类似ArcGIS的Identify对话框/////////////////////////////////////////////////////// ...
- 转:javascript获取上一访问页面
原文链接:移动端返回上一页,刚需!document.referrer 详解 全文如下: 返回上一页,在PC端我们可以使用:history.go(-1)或者history.back(),可以正常返回第一 ...
- 用js获取当前月份的天数
在获取每月天数的时候,一般都是存储到一个数组中进行获取,但是如果是二月份的话就需要首先判断是否闰年,再确定是28还是29了. js可以通过Date对象很方便的获取到每月的天数,在初始化Date对象时, ...
- html--对URL传参数进行解析
跳转页面需要传参数到另外一个html页面,跳转链接可写一个js的function function doView(articleId) { window.location.href ="co ...
- 怎么配置eclipse的联想功能
第一步:打开Eclipse,windows下,打开“window”→“Preferences” :mac下,打开“偏好设置”. 第二步:选择“Java”,展开,“Editor”,选择“Content ...
- 使用dva脚手架(dva-cli)快速构建React项目
安装 dva-cli 你应该会更希望关注逻辑本身,而不是手动敲入一行行代码来构建初始的项目结构,以及配置开发环境. 那么,首先需要安装的是 dva-cli .dva-cli 是 dva 的命令行工具, ...