题目描述

加里敦星球的人们特别喜欢喝可乐。因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的1号城市上。这个可乐机器人有三种行为: 停在原地,去下一个相邻的城市,自爆。它每一秒都会随机触发一种行为。现 在给加里敦星球城市图,在第0秒时可乐机器人在1号城市,问经过了t秒,可乐机器人的行为方案数是多少?

输入输出格式

输入格式:

第一行输入两个正整数况N,M,N表示城市个数,M表示道路个数。(1 <= N <=30,0 < M < 100)

接下来M行输入u,v,表示u,v之间有一条道路。(1<=u,v <= n)保证两座城市之间只有一条路相连。

最后输入入时间t

输出格式:

输出可乐机器人的行为方案数,答案可能很大,请输出对2017取模后的结果。

输入输出样例

输入样例#1: 复制

3 2
1 2
2 3
2
输出样例#1: 复制

8

说明

【样例解释】

1 ->爆炸

1 -> 1 ->爆炸

1 -> 2 ->爆炸

1 -> 1 -> 1

1 -> 1 -> 2

1 -> 2 -> 1

1 -> 2 -> 2

1 -> 2 -> 3

【数据范围】

对于20%的pn,有1 < t ≤ 1000

对于100%的pn,有1 < t ≤ 10^6。

裸的矩阵加速DP

 #include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,l,r) for (int i=l; i<=r; i++)
using namespace std; const int N=,md=;
struct mat{ int d[][]; mat(){ memset(d,,sizeof(d)); } }a,b,c;
int n,m,u,v,t,ans,cnt,h[N],nxt[N],to[N];
void add(int u,int v){ to[++cnt]=v; nxt[cnt]=h[u]; h[u]=cnt; } void print(mat b){ rep(i,,*n){ rep(j,,*n) printf("%3d",b.d[i][j]); printf("\n"); } } mat mul(mat a,mat b){
mat res;
rep(i,,*n) rep(j,,*n) rep(k,,*n) res.d[i][k]=(res.d[i][k]+a.d[i][j]*b.d[j][k]%md)%md;
return res;
} mat ksm(mat a,int b){
mat res;
rep(i,,*n) res.d[i][i]=;
for (; b; a=mul(a,a),b>>=)
if (b & ) res=mul(res,a);
return res;
} int main(){
scanf("%d%d",&n,&m);
rep(i,,m) scanf("%d%d",&u,&v),add(u,v),add(v,u);
scanf("%d",&t); a.d[][]=a.d[][n+]=;
rep(i,,n){
b.d[i][i]=b.d[i+n][i]=;
for (int j=h[i]; j; j=nxt[j]) b.d[to[j]+n][i]=;
}
rep(i,,n){
b.d[i+n][i+n]=;
for (int j=h[i]; j; j=nxt[j]) b.d[to[j]+n][i+n]=;
}
c=mul(a,ksm(b,t));
rep(i,,n) ans=(ans+c.d[][i])%md;
printf("%d\n",ans);
return ;
}

[BZOJ4887][TJOI2017]可乐(DP+矩阵快速幂)的更多相关文章

  1. 【BZOJ4887】[TJOI2017]可乐(矩阵快速幂)

    [BZOJ4887][TJOI2017]可乐(矩阵快速幂) 题面 BZOJ 洛谷 题解 模板题??? #include<iostream> #include<cstdio> # ...

  2. bnuoj 34985 Elegant String DP+矩阵快速幂

    题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=34985 We define a kind of strings as elegant s ...

  3. HDU 5434 Peace small elephant 状压dp+矩阵快速幂

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5434 Peace small elephant  Accepts: 38  Submissions: ...

  4. 【BZOJ】2004: [Hnoi2010]Bus 公交线路 状压DP+矩阵快速幂

    [题意]n个点等距排列在长度为n-1的直线上,初始点1~k都有一辆公车,每辆公车都需要一些停靠点,每个点至多只能被一辆公车停靠,且每辆公车相邻两个停靠点的距离至多为p,所有公车最后会停在n-k+1~n ...

  5. 【BZOJ】4861: [Beijing2017]魔法咒语 AC自动机+DP+矩阵快速幂

    [题意]给定n个原串和m个禁忌串,要求用原串集合能拼出的不含禁忌串且长度为L的串的数量.(60%)n,m<=50,L<=100.(40%)原串长度为1或2,L<=10^18. [算法 ...

  6. BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*

    BZOJ5298 CQOI2018 交错序列 [DP+矩阵快速幂优化] Description 我们称一个仅由0.1构成的序列为"交错序列",当且仅当序列中没有相邻的1(可以有相邻 ...

  7. Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】

    题意: 有b个blocks,每个blocks都有n个相同的0~9的数字,如果从第一个block选1,从第二个block选2,那么就构成12,问对于给定的n,b有多少种构成方案使最后模x的余数为k. 分 ...

  8. codeforces E. Okabe and El Psy Kongroo(dp+矩阵快速幂)

    题目链接:http://codeforces.com/contest/821/problem/E 题意:我们现在位于(0,0)处,目标是走到(K,0)处.每一次我们都可以从(x,y)走到(x+1,y- ...

  9. [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂)

    [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂) 题面 阿申准备报名参加GT考试,准考证号为N位数X1X2-.Xn,他不希望准考证号上出现不吉利的数字.他的不吉利数学A ...

随机推荐

  1. select多选框

    select多选框 效果: 代码: <HTML> <HEAD> <TITLE>选择下拉菜单</TITLE> <meta http-equiv=&q ...

  2. echarts初探:了解模块化

    什么是echarts?这是官网:http://echarts.baidu.com/ 简单的说就是百度提供的一些画图表的库,用它你可以简便的画出一些你想要的图表效果. 虽然蛮好用的,但对于不知道模块化的 ...

  3. ubuntu16.04中启动anaconda图形化界面

    $ source ~/anaconda3/bin/activate root $ anaconda-navigator

  4. JSTL标签库笔记

    1. 概述 JSTL(Jsp Standard Tag Library)即JSP标准标签库,只能运行在支持JSP1.2↑和Servlet2.3↑规范的容器上. 通常情况下我们在编写JSP页面的时候,在 ...

  5. DIDM源码分析

    DIDM源码分析 版本来源:GitHub上Opendaylight DIDM项目 参考资料来源:DIDM:Developer Guide 概述 DIDM是设备标识与驱动管理(Device Identi ...

  6. linux——vi和vim的区别

    vi 和vim 的区别   它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面. vim的这些优势主要体现在以下几个方面:1.多级撤消我们知道 ...

  7. Django 1.10中文文档-第一个应用Part7-自定义管理站点

    开发第一个Django应用,Part7 本教程上接Part6.将继续完成这个投票应用,本节将着重讲解如果用Django自动生成后台管理网站. 自定义管理表单 通过admin.site.register ...

  8. GO-指针与函数

    一.指针类型 1.普通类型,变量存的就是值,也叫值类型.指针类型存的是地址 2.获取变量的地址,用&,比如:var a int, 获取a的地址 &a 3.指针类型,变量存的是一个地址, ...

  9. C++显式类型转换

    C++显式类型转换 (注:本文例程改编自<C++ Primer>) 关于类型转换,C++保留了C语言中的类型转换方式,并提供了4中新的类型转换方式.<Effective C++> ...

  10. 次短路经(dijsktra)

    #include <cstdio>#include <cstring>#include <queue>#include <algorithm>#defi ...