【BZOJ1875】【矩阵乘法】[SDOI2009]HH去散步
Description
Input
Output
Sample Input
0 1
0 2
0 3
2 1
3 2
Sample Output
HINT
对于30%的数据,N ≤ 4,M ≤ 10,t ≤ 10。
对于100%的数据,N ≤ 20,M ≤ 60,t ≤ 230,0 ≤ A,B<n,0 ≤="" ai,bi="" <n。<="" p="">
【分析】
这个,能算数学吧...(其实是DP)
简单的矩阵乘法,练下手。
/*
宋代朱敦儒
《西江月·世事短如春梦》
世事短如春梦,人情薄似秋云。不须计较苦劳心。万事原来有命。
幸遇三杯酒好,况逢一朵花新。片时欢笑且相亲。明日阴晴未定。
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
#include <iostream>
#include <string>
#include <ctime>
#define LOCAL
const int MAXN = * + ;
const int MOD = ;
const double Pi = acos(-1.0);
long long G = ;//原根
const int MAXM = * + ;
using namespace std;
//读入优化
void read(int &x){
char ch;x = ;
int flag = ;
ch = getchar();
while (ch < '' || ch > '') {if (ch == '') flag = -; ch = getchar();}
while (ch >= '' && ch <= '') {x = x * + (ch - ''); ch = getchar();}
x *= flag;
} struct Edge{
int u, v;
}edge[MAXM];
int M;
struct Matrix{
int num[MAXN][MAXN];
//Matrix(){memset(num, 0, sizeof(num));}
Matrix operator * (const Matrix &b){
Matrix c;
memset(c.num, , sizeof(c.num));
for (int i = ; i < M; i++)
for (int j = ; j < M; j++)
for (int k = ; k < M; k++){
//if (i == 5 && j == 9)
//printf("");
c.num[i][j] = (c.num[i][j] + num[i][k] * b.num[k][j]) % MOD;
}
return c;
}
}x1, x2, x3;
Matrix pow(Matrix a, int b){
if (b == ) return a;
Matrix tmp = pow(a, b / );
if (b % == ) return tmp * tmp;
else return (tmp * tmp) * a;
}
int n, m, t, A, B, head[MAXN], next[MAXM]; //无向边
void addEdge(int u, int v){
edge[M].u = u; edge[M].v = v;
next[M] = head[u];
head[u] = M++; edge[M].u = v; edge[M].v = u;
next[M] = head[v];
head[v] = M++;
}
void init(){
memset(x1.num, , sizeof(x1.num));
memset(x2.num, , sizeof(x2.num));
memset(x3.num, , sizeof(x3.num));
memset(head, -, sizeof(head));
read(n);read(m);
read(t);read(A);read(B);
M = ;//注意这里要人为规定一个源
for (int i = ; i <= m; i++){
int u, v;
read(u);read(v);
addEdge(u, v);
}
}
void prepare(){
for (int i = head[A]; i != -; i = next[i]) x1.num[][i]++; for (int i = ; i < M; i++)
for (int j = ; j < M; j++)
if (edge[i].v == edge[j].u && (i ^ ) != j) x2.num[i][j]++;//注意这里是以边来相连
/*
for (int i = 1; i < M; i++){
for (int j = 1; j < M ; j++) printf("%d ", x2.num[i][j]);
printf("\n");
}*/
}
void work(){
int Ans = ;
x1 = x1 * pow(x2, t - );
/*for (int i = 1; i < M; i++){
for (int j = 1; j < M ; j++) printf("%d ", x1.num[i][j]);
printf("\n");
}*/
for (int i = head[B]; i != -; i = next[i]) Ans = (Ans + x1.num[][i ^ ]) % MOD;
printf("%d\n", Ans);
} int main(){
init();
prepare();
work();
return ;
}
【BZOJ1875】【矩阵乘法】[SDOI2009]HH去散步的更多相关文章
- BZOJ_1875_[SDOI2009]HH去散步_矩阵乘法
BZOJ_1875_[SDOI2009]HH去散步_矩阵乘法 Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但 是同时H ...
- bzoj 1875: [SDOI2009]HH去散步 -- 矩阵乘法
1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走, ...
- BZOJ 1875: [SDOI2009]HH去散步( dp + 矩阵快速幂 )
把双向边拆成2条单向边, 用边来转移...然后矩阵乘法+快速幂优化 ------------------------------------------------------------------ ...
- bzoj1875: [SDOI2009]HH去散步
终于A了...早上按自己以前的写法一直WA.下午换了一种写法就A了qwq #include<cstdio> #include<cstring> #include<iost ...
- 「 洛谷 」P2151 [SDOI2009]HH去散步
小兔的话 欢迎大家在评论区留言哦~ HH去散步 题目限制 内存限制:125.00MB 时间限制:1.00s 标准输入 标准输出 题目知识点 动态规划 \(dp\) 矩阵 矩阵乘法 矩阵加速 矩阵快速幂 ...
- AC日记——[SDOI2009]HH去散步 洛谷 P2151
[SDOI2009]HH去散步 思路: 矩阵快速幂递推(类似弗洛伊德): 给大佬跪烂-- 代码: #include <bits/stdc++.h> using namespace std; ...
- [LuoguP2151][SDOI2009]HH去散步_递推_矩阵乘法_图论
HH去散步 题目链接:https://www.luogu.org/problem/P2151 数据范围:略. 题解: 数据范围好小,让人不禁想用一些毒瘤算法,但是失败了. 这种类似时间啊这种有点重复味 ...
- 洛谷P2151 [SDOI2009] HH去散步 [矩阵加速]
题目传送门 HH去散步 题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走 ...
- 【bzoj1875】[SDOI2009]HH去散步 矩阵乘法
题目描述 一张N个点M条边的无向图,从A走到B,要求:每一次不能立刻沿着上一次的边的反方向返回.求方案数. 输入 第一行:五个整数N,M,t,A,B. N表示学校里的路口的个数 M表示学校里的路的条数 ...
随机推荐
- BZOJP1003 [ZJOI2006]物流运输trans
BZOJP1003 [ZJOI2006]物流运输trans 1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec Memory Limit: 162 MB Sub ...
- Git 使用相关
GIT命令和使用 安装git完成后,创建工程目录,右键运行bash here 1.查看git当前配置信息: git config -l 2.配置用户名.邮箱git config --global us ...
- Kernel compiling for Pi 2
https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=101188&p=807579&hilit=cross+comp ...
- 关于yuv 的pack(紧缩格式)和planner(平面格式)格式 [转]
关于yuv 格式 YUV 格式通常有两大类:打包(packed)格式和平面(planar)格式.前者将 YUV 分量存放在同一个数组中,通常是几个相邻的像素组成一个宏像素(macro-pixel);而 ...
- linux内核--页高速缓存
页高速缓存,可以理解为对磁盘中的文件内容进行缓存的一种缓存策略,当然它不仅仅用于磁盘文件. 当对同一磁盘数据反复访问时,缓存数据就是非常必须的了.这就是buffer和 cache这两个概念中的buff ...
- (转)Spring整合Redis作为缓存
采用Redis作为Web系统的缓存.用Spring的Cache整合Redis. 一.关于redis的相关xml文件的写法 <?xml version="1.0" ...
- 微信开发第3章 通过accesstoken获取用户分组
上一章我们获取到了access_token,那么我们可以试着拿token获取用户粉丝分组,调用接口地址为: http请求方式: GET(请使用https协议) https://api.weixin.q ...
- 理解事件捕获。在限制范围内拖拽div+吸附+事件捕获
一.实现的效果是在限制范围内拖拽div+吸附+事件捕获. 这里需要理解的是事件捕获,这个事件捕获也是为了兼容div在拖拽过程中,文本不被选中这个问题. 如此良辰美景,拖拽也可以很洒脱哈.先看看图, 二 ...
- TortoiseSVN客户端重新设置用户名和密码[转]
在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个选项是保存认证信息,如果选了这个选项,那么以后就不用每次都输入一遍用户名密码了. 不过,如果 ...
- 色情不是我的所有——在法律边缘起舞的 FC2
[核心提示] 世界上最大的色情站点之中的一个这项「殊荣」只是是 FC2 无心插柳被用户戴上的一顶帽子,这个从 1999 年成立至今已经超过 15 年历史的互联网活化石,远比你想象中更加高深莫測. 一个 ...