题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1875


注意的是路径不可以重复,所以这题把边看成点。每一条无向边拆成两条有向边。

令${F[t][i][j]}$表示从编号为$i$的边走到编号为$j$的边走了$t$步的边集个数。

${F[t][i][j]=\sum f[i-1][i][k]*f[i-1][k][j]}$

这不就是矩乘的形式么,矩乘优化DP即可。


 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 10010
#define llg long long
#define SIZE 126
#define mod 45989
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg nn,m,A,B,last[maxn*],t;
llg cnt=;
struct MATRIX
{
llg mt[SIZE][SIZE];
llg x,y;
void init(){memset(mt,,sizeof(mt)); x=y=;}
}ans,def; struct edge
{
llg from,to,next,v;
}e[maxn*]; llg in_()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
} inline MATRIX operator *(MATRIX a,MATRIX b)
{
MATRIX c;
for (llg i=;i<=cnt;i++) for (llg j=;j<=cnt;j++) c.mt[i][j]=;
c.x=a.x; c.y=b.y;
for(int i=;i<=a.x;i++)
for(int j=;j<=b.y;j++)
for(int k=;k<=a.y;k++)
c.mt[i][j]=(c.mt[i][j]+(a.mt[i][k])*(b.mt[k][j]))%mod;
return c;
} void insert(llg v,llg u)
{
e[++cnt].to=v; e[cnt].from=u; e[cnt].next=last[u],last[u]=cnt;
e[++cnt].to=u; e[cnt].from=v; e[cnt].next=last[v],last[v]=cnt;
} int main()
{
yyj("bzoj1875");
cin>>nn>>m>>t>>A>>B;
for (llg i=;i<=m;i++) insert(in_(),in_());
MATRIX b;
b.init();
def.x=def.y=ans.x=ans.y=b.x=b.y=cnt;
t--;
for (llg i=;i<=cnt;i++)
for (llg j=;j<=cnt;j++)
if (e[i].to==e[j].from && i!=(j^)) b.mt[i][j]++;
for (llg i=;i<=cnt;i++) ans.mt[i][i]=;
for (llg i=t;i;i>>=,b=b*b)
if (i&)
ans=ans*b;
for (llg i=last[A];i;i=e[i].next) def.mt[][i]++;
ans=def*ans;
llg sum=;
for (llg i=last[B];i;i=e[i].next) sum+=ans.mt[][i^];
cout<<sum%mod;
return ;
}

【BZOJ】1875: [SDOI2009]HH去散步的更多相关文章

  1. BZOJ 1875: [SDOI2009]HH去散步( dp + 矩阵快速幂 )

    把双向边拆成2条单向边, 用边来转移...然后矩阵乘法+快速幂优化 ------------------------------------------------------------------ ...

  2. bzoj 1875: [SDOI2009]HH去散步 -- 矩阵乘法

    1875: [SDOI2009]HH去散步 Time Limit: 20 Sec  Memory Limit: 64 MB Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走, ...

  3. bzoj 1875 [SDOI2009]HH去散步(矩乘)

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

  4. bzoj 1875: [SDOI2009]HH去散步

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

  5. BZOJ 1875: [SDOI2009]HH去散步(矩阵乘法)

    首先,题意就把我们引向了矩阵乘法,注意边长m<=60,那么就按边建图,变成一个120个点的图,然后乱搞就行了。 PS:WA了N久改了3次终于A了QAQ CODE: #include<cst ...

  6. BZOJ.1875.[SDOI2009]HH去散步(DP 矩阵乘法)

    题目链接 比较容易想到用f[i][j]表示走了i步后到达j点的方案数,但是题目要求不能走上一条走过的边 如果这样表示是不好转移的 可以考虑边,f[i][j]表示走了i步后到达第j条边的方案数,那么有 ...

  7. BZOJ 1875 [SDOI2009]HH去散步 ——动态规划 矩阵乘法

    发现t非常大,所以大概就是快速幂一类的问题了, 然后根据k^3logn算了算,发现k大约是边数的时候复杂度比较合适. 发现比较麻烦的就是前驱的记录,所以直接把边看做点,不能走反向边,但是可以走重边,然 ...

  8. 【BZOJ】1875: [SDOI2009]HH去散步 矩阵快速幂

    [题意]给定n个点m边的无向图,求A到B恰好经过t条边的路径数,路径须满足每条边都和前一条边不同.n<=20,m<=60,t<=2^30. [算法]矩阵快速幂 [题解]将图的邻接矩阵 ...

  9. 1875. [SDOI2009]HH去散步【矩阵乘法】

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

随机推荐

  1. Linux CPU使用率含义及原理

    相关概念 在Linux/Unix下,CPU利用率分为用户态.系统态和空闲态,分别表示CPU处于用户态执的时间,系统内核执行的时间,和空闲系统进程执行的时间. 下面是几个与CPU占用率相关的概念. CP ...

  2. SpringMVC之JSON交互

    #什么是json? json是一种用于储存数据格式,是js脚本语言的子集. #json的作用? 它可以传递对象.数组等数据结构.如果是单个数据,则要用数组,不用对象,因为对象都是键值对的 方式去存储, ...

  3. OSI七层协议与TCP/IP模型

    OSI为Open System Interconnection的缩写,意为开放式系统互联,国际标准化组织(ISO,International Organization for Standardizat ...

  4. windows下rabbitmq-c编译(带openssl、无需MinGW)

    因为项目原因,需要使用到rabbitmq的c客户端库.首先,参见上一篇windows下openssl编译,如果已经使用cmake编译过了,则先delete cache(File-Delete Cach ...

  5. "添加与删除程序"报rundll32错误

    无法启动"添加与删除程序"系统报rundll32错误 系统反馈以下信息: rundll32.exe应用程序错误"0x00310030"指令 解决方法: 1.启动 ...

  6. 零基础Python爬虫实现(百度贴吧)

    提示:本学习来自Ehco前辈的文章, 经过实现得出的笔记. 目标 http://tieba.baidu.com/f?kw=linux&ie=utf-8 网站结构 学习目标 由于是第一个实验性质 ...

  7. bzoj 4289 Tax - 最短路

    题目传送门 这是一条通往vjudge的神秘通道 这是一条通往bzoj的神秘通道 题目大意 如果一条路径走过的边依次为$e_{1}, e_{2}, \cdots , e_{k}$,那么它的长度为$e_{ ...

  8. Codeforces 581F Zublicanes and Mumocrates - 树形动态规划

    It's election time in Berland. The favorites are of course parties of zublicanes and mumocrates. The ...

  9. Oracle使用——oracle 忘记用户密码登录

    背景 有时候我们忘记了oracle登录的用户密码,甚至是用户名称都不确定,应该怎么登陆呢 操作系统 CentOS7 Oracle12c 操作步骤 使用sqlplus登录系统:sqlplus  /  a ...

  10. checkbox勾选事件,JQ设置css,下拉框JQ选中

    <input id="CheckMainCompany" type="checkbox"/> $(function() { $("#Che ...