【bzoj1875】[SDOI2009]HH去散步 矩阵乘法
题目描述
输入
输出
一行,表示答案。
样例输入
4 5 3 0 0
0 1
0 2
0 3
2 1
3 2
样例输出
4
题解
矩阵乘法
“每一次不能立刻沿着上一次的边的反方向返回”这个条件的限制导致不能直接进行矩阵乘法。
由于边数很少,我们可以换个思路:把边看作矩阵乘法的行列,矩阵中的元素表示 从一条边走到另一条边的方案数。
那么对于两条边$i,j$,如果不是刚走过来的边并且能够接上($y_i=x_j$),则$A_{ij}=1$。
然后建立两个虚点,第一个向起点为s的边连边,起点为t的项第二个连边。
然后快速幂矩阵乘法即可。
时间复杂度$O(m^3\log t)$
#include <cstdio>
#include <cstring>
#define N 130
#define mod 45989
int m , px[N] , py[N];
struct data
{
int v[N][N];
data() {memset(v , 0 , sizeof(v));}
int* operator[](int a) {return v[a];}
data operator*(data a)
{
data ans;
int i , j , k;
for(i = 0 ; i <= m ; i ++ )
for(j = 0 ; j <= m ; j ++ )
for(k = 0 ; k <= m ; k ++ )
ans[i][j] = (ans[i][j] + v[i][k] * a[k][j]) % mod;
return ans;
}
}a;
data pow(data x , int y)
{
data ans;
int i;
for(i = 0 ; i <= m ; i ++ ) ans[i][i] = 1;
while(y)
{
if(y & 1) ans = ans * x;
x = x * x , y >>= 1;
}
return ans;
}
int main()
{
int n , k , s , t , i , j;
scanf("%d%d%d%d%d" , &n , &m , &k , &s , &t);
for(i = 1 ; i <= m ; i ++ ) scanf("%d%d" , &px[i << 1] , &py[i << 1]) , px[i << 1 | 1] = py[i << 1] , py[i << 1 | 1] = px[i << 1];
m = m * 2 + 1;
for(i = 2 ; i <= m ; i ++ )
{
if(px[i] == s) a[0][i] = 1;
if(py[i] == t) a[i][1] = 1;
for(j = 2 ; j <= m ; j ++ )
if(py[i] == px[j] && (i ^ j) != 1)
a[i][j] = 1;
}
a = pow(a , k + 1);
printf("%d\n" , a[0][1]);
return 0;
}
【bzoj1875】[SDOI2009]HH去散步 矩阵乘法的更多相关文章
- bzoj 1875: [SDOI2009]HH去散步 -- 矩阵乘法
1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走, ...
- bzoj1875 [SDOI2009]HH去散步 矩阵快速幂
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1875 题解 如果没有这个"不能立刻沿着刚刚走来的路走回",那么这个题就是一 ...
- BZOJ1875 [SDOI2009]HH去散步 矩阵
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1875 题意概括 在一个无向图(有重边无自环)中走,不能在经过连续经过某一条边2次. 现在走t步,问 ...
- [SDOI2009] HH去散步 (矩阵乘法)
link $solution:$ 将边化为点后重新建矩阵,跑$T-1$幂即可(因为跑的是新边). 最后直接找与$x,y$所相连的边即可. #include<iostream> #inclu ...
- bzoj1875 [SDOI2009]HH去散步——矩阵快速幂
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1875 有个限制是不能走回头路,比较麻烦: 所以把矩阵中的元素设成边的经过次数,单向边之间就好 ...
- bzoj1875: [SDOI2009]HH去散步
终于A了...早上按自己以前的写法一直WA.下午换了一种写法就A了qwq #include<cstdio> #include<cstring> #include<iost ...
- 洛谷P2151 [SDOI2009] HH去散步 [矩阵加速]
题目传送门 HH去散步 题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走 ...
- [难题题解] [BZOJ1875] [SDOI2009] HH去散步
题目H有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是个喜欢变化的人 ...
- 【题解】 bzoj1875: [SDOI2009]HH去散步 (动态规划+矩阵乘法)
bzoj1875,懒得复制,戳我戳我 Solution: 看到这道题,看的出是个dp,每个点\(t\)时刻到达的方案数等于\(t-1\)到连过来的点方案数之和 但又因为题目有要求不能走一样的边回去不是 ...
随机推荐
- Centos防火墙添加IP白名单
Centos iptables防火墙添加IP白名单,指定IP可访问端口 vi /etc/sysconfig/iptables 以下为我虚拟机的防火墙为例(Centos 7) # sample conf ...
- github上更新fork项目
转载:https://blog.csdn.net/qq1332479771/article/details/56087333 ps:需要用GitHub所指定的chrome或者firefox浏览器,其它 ...
- Dnsmasq域名解析系统安装配置
Dnsmasq使用上比bind要简便得多,可以做正向.反向dns解析,支持DHCP服务.也可以做内部dns服务器用. 默认下,dnsmasq使用系统的/etc/resolv.conf,并读取/etc/ ...
- HTML5 canvas 圆盘抽奖
使用html5 canvas 绘制的圆盘抽奖程序 效果图: 贴上全部代码: 1 <!DOCTYPE html> <html> <head> <meta ch ...
- 7,MongoDB 之 Limit 选取 Skip 跳过 Sort 排序
我们已经学过MongoDB的 find() 查询功能了,在关系型数据库中的选取(limit),排序(sort) MongoDB中同样有,而且使用起来更是简单 首先我们看下添加几条Document进来 ...
- Centos7 查看Mysql配置文件
my.cnf是mysql启动时加载的配置文件,一般会放在mysql的安装目录中,用户也可以放在其他目录加载. 安装mysql后,系统中会有多个my.cnf文件,有些是用于测试的. 使用locate m ...
- BitLocker:如何启用网络解锁
TechNet 库Windows ServerWindows Server 2012 R2 和 Windows Server 2012服务器角色和技术安全和保护BitLockerBitLocker 中 ...
- js点击重置按钮重置表单
<html><head><script type="text/javascript">function formReset(){document ...
- 【Regularization】林轩田机器学习基石
正则化的提出,是因为要解决overfitting的问题. 以Linear Regression为例:低次多项式拟合的效果可能会好于高次多项式拟合的效果. 这里回顾上上节nonlinear transf ...
- 【Text Justification】cpp
题目: Given an array of words and a length L, format the text such that each line has exactly L charac ...