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 题解 如果没有这个"不能立刻沿着刚刚走来的路走回",那么这个题就是一 ...
随机推荐
- Vuejs中slot实现自定义组件header、footer等
Vuejs中slot实现自定义组件header.footer等 vue中的slot主要负责内容分发,之前有介绍过slot的内容,具体链接:http://www.cnblogs.com/vipzhou/ ...
- Java利用反射取得类的所有信息
Java中可以利用反射获取类的名称.构造函数.属性.方法.也就是说可以通过反射可以取得类的所有信息(不管该成员是否封装为private). 如有下面的Dept类定义: package org.lyk. ...
- 【原】使用Builder模式替代构造参数传参
前言:关于传递参数,当参数过多的时候我们可以考虑使用建造者模式. #没用 Builder模式 之前是这样传参的: 如下所示,构造方法里面的参数一大堆,看起来就非常的混乱. 用了Builder模式之后是 ...
- 分析Ethernet标准和Ieee802.3标准规定的MAC层帧结构
分析所用软件下载:Wireshark-win32-1.10.2.exe 阅读导览 1. 学习Wireshark的安装与使用 2. 熟悉Wireshark的操作界面与功能 3. 设计应用以获取以太网链路 ...
- Code Signal_10分钟挑战题_constructArray
完成时间3分06秒 Given an integer size, return an array containing each integer from 1 to size in the follo ...
- java集合(List集合与Map集合的数据转换)
List集合与Map集合的数据转换 实现List和Map数据的转换. 具体要求如下: 功能1:定义方法public void listToMap( ){ }将List中Student元素封装到Map中 ...
- thinkPHP的几个系统常量
echo "当前请求:" . __SELF__ . '<br>'; echo "当前分组:" . __MODULE__ . '<br>' ...
- C/S模式下的打印方法
C/S模式使用润乾报表时有两种打印方法(都使用设计器授权) 1. 使用加密狗打印 这种方式需要使用加密狗,适用于客户端较少时 2. 使用api调用打印方法实现打印 ...
- 八、Vue中的computed属性
看了网上很多资料,对vue的computed讲解自己看的都不是很清晰,今天忙里抽闲,和同事们又闲聊起来,对computed这个属性才有了一个稍微比较清晰的认识,下面的文章有一部分是转自: https: ...
- 【Java】得到本机IP
import java.net.InetAddress; import java.net.UnknownHostException; public class MainProcess { public ...