bzoj1875 HH去散步
一开始特别天真,
$Folyd$传递闭包写了一下过了样例就交上去了
然后$gg$
$qwq$
想了想$……$
还要写一点东西
最后统计答案的时候有细节要注意
/**************************************************************
Problem: 1875
User: zhangheran
Language: C++
Result: Accepted
Time:17164 ms
Memory:3876 kb
****************************************************************/ // luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
//#include"suqingnian.h"
#include<algorithm>
#include<cstring>
using namespace std;
const int mod=;
int n,m,t,a,b;
struct data{
int v;int u;int next;
}edge[];int alist[];int cnt;
void add(int u,int v)
{
edge[++cnt].u=u;
edge[cnt].v=v;
edge[cnt].next=alist[u];
alist[u]=cnt;
return ;
}
struct Martix{
long long num[][];
void hint(){memset(num,,sizeof(num));for(int i=;i<=m*;i++) num[i][i]=;}
void clear(){memset(num,,sizeof(num));}
friend Martix operator *(const Martix &a,const Martix &b)
{
Martix c;
memset(c.num,,sizeof(c.num));
for(int k=;k<=m*;k++)
for(int i=;i<=m*;i++)
for(int j=;j<=m*;j++)
c.num[i][j]=(c.num[i][j]+a.num[i][k]*b.num[k][j]%mod)%mod;
return c;
}
friend Martix operator +(const Martix &a,const Martix &b)
{
Martix c;memset(c.num,,sizeof(c.num));
for(int i=;i<=m*;i++)
for(int j=;j<=m*;j++)
c.num[i][j]=(a.num[i][j]+b.num[i][j])%mod;
return c;
}
};
Martix
_pow(Martix _a,int _b)
{
Martix _res;_res.hint();
for(;_b;_b >>= , _a= _a * _a )
if(_b & ) _res = _res * _a ;
return _res ;
}
int u,v;
Martix map,dis;
int ans=;
int main()
{
memset(alist,-,sizeof(alist));
scanf("%d%d%d%d%d",&n,&m,&t,&a,&b);
a++,b++;
for(int i=;i<=m;i++) scanf("%d%d",&u,&v),add(u+,v+),add(v+,u+);
int next=alist[a];
while(next!=-) map.num[][next]++,next=edge[next].next;
for(int i=;i<=cnt;i++){
v=edge[i].v,next=alist[v];
while(next!=-){
if(next!=(i+((i&)?:-)))
dis.num[i][next]++;
next=edge[next].next;
}
}
dis=_pow(dis,t-);
map=map*dis;
// for(int i=0;i<=m*2;i++,puts(""))
// for(int j=0;j<=m*2;j++)
// printf("%d ",map.num[i][j]);
for(int i=;i<=cnt;i++) if(edge[i].v==b) ans=(ans+map.num[][i])%mod;
printf("%d",ans);
return ;
}
bzoj1875 HH去散步的更多相关文章
- BZOJ-1875 HH去散步 DP+矩阵乘法快速幂
1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Submit: 1196 Solved: 553 [Submit][Statu ...
- 【Bzoj1875】HH去散步
[Bzoj1875]HH去散步 先说一下边点互化的思路(貌似这种题不多?),以后看见边数少的要死的记得想边点乎化,将无向边变成有向边在考虑边之间的可达性,如果边x的终点是边y的起点(前提不是同一条边) ...
- bzoj1875: [SDOI2009]HH去散步
终于A了...早上按自己以前的写法一直WA.下午换了一种写法就A了qwq #include<cstdio> #include<cstring> #include<iost ...
- 【bzoj1875】【SDOI2009】【HH去散步】
1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Submit: 932 Solved: 424 [Submit][Status ...
- BZOJ 1875: [SDOI2009]HH去散步( dp + 矩阵快速幂 )
把双向边拆成2条单向边, 用边来转移...然后矩阵乘法+快速幂优化 ------------------------------------------------------------------ ...
- 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去散步
题目链接:HH去散步 如果不考虑不能走上一次走的边的话,这道题就是一个矩乘的裸题. 现在有了这个条件其实也很好做.我们平常的矩阵都是按点建的,\(A_{i,j}\)表示从第\(i\)个点走到第\(j\ ...
- 洛谷P2151 [SDOI2009] HH去散步 [矩阵加速]
题目传送门 HH去散步 题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走 ...
随机推荐
- js引用类型赋值,深拷贝与浅拷贝
JS中引用类型使用等号“=” 赋值,相当于把原来对象的地址拷贝一份给新的对象,这样原来旧的对象与新的对象就指向同一个地址,改变其中一个对象就会影响另外那个对象,也就是所谓的浅拷贝.例如: var ar ...
- 一道容易栽坑的有趣的面试题(关于js,定时器,闭包等)
1.首先下面代码输出什么? for (var i = 0; i < 5; i++) { console.log(i); } 输出:0 1 2 3 4 2.上面只是普通的输出,没有陷阱再看下面这个 ...
- JAVA 中的IO流
Java中的IO流是用来处理设备与设备之前的数据传输,在java中以流的形式传输.流分为两类:字节流和字符流. 字节流:InputStream,OutPutSteam.(计算机内的数据都是以字节存储的 ...
- JAVA中List的几个方法
add()方法.插入某个位置的数据,他有两个参数一个参数是下标,一个参数是元素.需要注意的是下标大小应该小于等于List集合大小,否则就会抛出下标越界异常! 代码: public static ...
- Codeforces 667C DP
题意:给你一个字符串,这个字符串的构造方法如下:先选择一个长度大于4的前缀,然后每次向字符串尾部添加一个长度为2或者长度为3的后缀,不能添加连续的相同的后缀,问可能的后缀有哪些?并按字典序输出去. 思 ...
- Node.js中流程控制
Node.js中的流程控制可以使用async,在使用之前需要先安装,使用npm安装 npm install async --g 下面主要介绍4种流程控制的方式: 1.串行无关联:async.serie ...
- SqlServer——系统函数
1) CASE CASE有两种使用形式:一种是简单的CASE函数,另一种是搜索型的CASE函数. [1]简单的 CASE 函数 Format: CASE input_expression WHEN w ...
- c/c++笔试面试试题
C 试题(纯属转载) 1.求下面函数的返回值(微软) int func(x) { int countx = 0; while(x) { countx ++; ...
- IntelliJ IDEA开发golang环境配置
IntelliJ IDEA开发golang环境配置 首先把GO安装好...(自行安装,附上一篇我之前写的MAC安装GO) 安装IntelliJ IDEA,下载地址: https://www.jetbr ...
- ajax 整个表单的提交
重点:data: $("#form1").serialize() function setSaveNext() { setSaveData(); var cx = pageInde ...