P2151 [SDOI2009]HH去散步

题意:

HH有个一成不变的习惯,喜欢饭后百步走。所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离。 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回。 又因为HH是个喜欢变化的人,所以他每天走过的路径都不完全一样,他想知道他究竟有多 少种散步的方法。

现在给你学校的地图(假设每条路的长度都是一样的都是1),问长度为t,从给定地 点A走到给定地点B共有多少条符合条件的路径

题解:

这题跟裸的矩阵快速幂唯一区别是,本题中不允许刚经过的边,本题中给的是无向边,顿时没有什么思路。
我们可以点边互换,将边成是点,然后再重新建边,如果原图中有4个边,分别编号1~4,然后我们依次判断第i个边的尾和第j个边的头是否连接,如果连接就从第i个边向第j个边连一条边,
如何处理走回去的情况,只要我们同一条边拆出来的两个点互不连边即可

代码:

// Problem: P2151 [SDOI2009]HH去散步
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P2151
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// Data:2021-08-13 16:47:00
// By Jozky
#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
template <typename T> inline void read(T& x)
{T f= 1;x= 0;char ch= getchar();while (0 == isdigit(ch)) {if (ch == '-')f= -1;ch= getchar();}while (0 != isdigit(ch))x= (x << 1) + (x << 3) + ch - '0', ch= getchar();x*= f;
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}const int maxn= 151, mod= 45989;
int n, m, s, t, x[maxn], y[maxn], cnt;
ll T;
struct Ma
{ll m[maxn][maxn];
};
Ma mul(Ma a, Ma b, int n)
{Ma temp;memset(&temp, 0, sizeof(temp));for (int i= 1; i <= n; i++) {for (int j= 1; j <= n; j++) {for (int k= 1; k <= n; k++) {temp.m[i][j]= (temp.m[i][j] + ((a.m[i][k] % mod) * (b.m[k][j]) % mod) % mod) % mod;}}}return temp;
}
Ma poww(Ma res, ll N, int n)
{Ma ans;for (int i= 1; i <= n; i++) {ans.m[i][i]= 1;}while (N) {if (N & 1)ans= mul(ans, res, n);res= mul(res, res, n);N>>= 1;}return ans;
}
Ma A;
void add(int u, int v)
{x[++cnt]= u;y[cnt]= v;
}
int main()
{//rd_test();scanf("%d%d%lld%d%d", &n, &m, &T, &s, &t);s++;t++;x[++cnt]= 0;y[cnt]= s;for (int i= 1, u, v; i <= m; i++) {scanf("%d%d", &u, &v);u++, v++;x[++cnt]= u, y[cnt]= v;x[++cnt]= v, y[cnt]= u;}for (int i= 1; i <= cnt; i++)for (int j= 1; j <= cnt; j++)if (i != j && i != (j ^ 1)) {if (y[i] == x[j])A.m[i][j]= 1;}Ma Ans= poww(A, T, cnt);int ans= 0;for (int i= 1; i <= cnt; i++)if (y[i] == t) {ans= (ans + Ans.m[1][i]) % mod;}cout << ans << endl;return 0;//Time_test();
}

P2151 [SDOI2009]HH去散步相关推荐

  1. 洛谷P2151 [SDOI2009]HH去散步

    Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因 ...

  2. 【题解】 P2151 [SDOI2009]HH去散步

    \(Description:\) 给出一张图,求\(A->B\),经过t的时间之后的方案数,答案对45989取模. 但不能\(a->b\),马上,\(b->a\) \(Sample\ ...

  3. 矩阵——洛谷P2151 [SDOI2009]HH去散步

    https://daniu.luogu.org/problem/show?pid=2151#sub 题目就是说我们不可以回走: 但是环还是可以的: 如果上次1->3 现在不可以直接3->1 ...

  4. BZOJ 1875[SDOI2009]HH去散步

    题面: 1875: [SDOI2009]HH去散步 Time Limit: 20 Sec  Memory Limit: 64 MB Submit: 1750  Solved: 851 [Submit] ...

  5. [SDOI2009]HH去散步(矩阵)

    题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是个喜欢 ...

  6. 【47.40%】【BZOJ 1875】[SDOI2009]HH去散步

    Time Limit: 20 Sec  Memory Limit: 64 MB Submit: 1363  Solved: 646 [Submit][Status][Discuss] Descript ...

  7. [SDOI2009]HH去散步

    题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是个喜欢 ...

  8. 洛谷-2151 [SDOI2009]HH去散步

    题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是个喜欢 ...

  9. bzoj1875 [SDOI2009]HH去散步 偏移+化边+矩乘

    这个题一看便知是矩乘,但是有限制条件:不能往回走 其实正常的想法应该是记录来向然后容斥,但在减答案的时候是子问题递归的,所以容斥不行 然后可以记录路径终点的前继和起点的后继,但复杂度不科学 由于点与点 ...

最新文章

  1. 模板引擎-模板引擎渐进进化
  2. AfxBeginThread
  3. 点击列表高亮_HTML5 标签列表
  4. java9 jar hell,Java Jar hell运行时异常
  5. 使用ajax预加载图片
  6. 《leetcode》remove-duplicates-from-sorted-array-ii
  7. Qt5中文乱码解决方案
  8. 有关linux用户和用户组管理的知识详解
  9. poj 1734 (最小环)
  10. c#动态编译并执行字符串
  11. pytorch torch.utils.data.TensorDataset
  12. 计算机系统-函数调用约定/调用规范/传参方式
  13. [转]计算机视觉、机器学习相关领域论文和源代码大集合--持续更新
  14. 网络编程遇到的一个错误?
  15. CCF201903-1小中大(C语言)
  16. mentohust 使用
  17. express 配置ip
  18. 华为p8 root android6,华为P8root工具
  19. 【Linux】嵌入式Linux系统的移植(下篇:BootLoader,以U-Boot为例)
  20. JavaWeb——动态页面技术(JSP/EL/JSTL)

热门文章

  1. 超炫酷的枪械3D动图,喜欢的不得了!
  2. 一个孩子能长大成人到底有多不容易? | 今日最佳
  3. JAVA类思维_面向对象思维 Java中的类和对象及其应用
  4. linux 系统迁移到固态硬盘,把Debian GNU/Linux迁移到SSD上
  5. mysql binlog 大数据_后起之秀 | MySQL Binlog增量同步工具go-mysql-transfer实现详解
  6. jq校验输入框值变化时_谈谈自己对CRC校验的理解
  7. android 获取app自启动权限状态_央视批手机App权限问题:频繁自启动 搜集个人隐私触目惊心...
  8. 利用计算机制作多媒体最后一步,福建省高中会考 多媒体技术应用 选择题专项练习十一(201206)(有答案)...
  9. android 监听布局改变,Android通过监听最外层布局的改变监听键盘的状态,软键盘的弹出和收起都会改变外层布局(前提是把Activity的mode设置成压缩);...
  10. 广东省计算机应用(2010),2010年广东省高等教育自学考试计算机基础及应用(N)试卷(课程代码.doc...