洛谷传送门,BZOJ传送门

可乐

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 299  Solved: 207

Description

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

Input

第一行输入两个正整数N,M表示城市个数,M表示道路个数。(1≤N≤30,0≤M≤100)
接下来M行输入u,v表示u,v之间有一条道路。
(1≤u,v≤n)保证两座城市之间只有一条路相连。
最后输入时间t。1<t≤10^6

Output

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

Sample Input

3 2
1 2
2 3
2

Sample Output

8

HINT

Source


  分析:

  一道人类智慧题,思路无比妙。

  大多数人第一眼看到这题反应应该都是$DP$,出题人貌似也没想卡一般的$DP$(用$DP$+矩阵加速也是可以以非常优秀的效率过掉的),因此写的好看的$DP$也可以过,不过可能会需要吸一口氧气。

  正解是矩阵快速幂。

  嗯???矩阵快速幂??这题和矩阵快速幂有关系??是的,正解就是矩阵快速幂。juruo一开始也没想到,还是看了一位julao的思路才豁然开朗。

  首先看,$n$的范围只有$30$,明显可以用邻接矩阵。而这题的突破口就在这里。我们来思考,如果对邻接矩阵$A$做快速幂会怎样?

  从$Floyd$算法的角度分析,没有边权时(即默认所有边的边权为$1$时),$A^k$中的任意一个元$a_{i,j}$表示从$i$到$j$经过$k$条边的方案数。这个不太方便字面上解释,可以自己根据矩阵乘法的法则结合具体例子分析一下。

  对于这题,因为可以留在原地,所以我们可以把所有点都加上一个自环。还有爆炸的情况,我们可以把爆炸当作第$0$号点,并单方面建立所有点到$0$号点的单向边,这样的过的话到达$0$号点以后就不会再到其他点,就能表示出爆炸的情况了。最后统计的答案应该就是从$1$号点到所有点经过$k$条边的情况总和,也就是$\sum ^n_{i=0}a[1][i]$。

  剩下的就是矩阵快速幂的模板了。

  不得不说,真是一道人类智慧题。

  Code:

  

//It is made by HolseLee on 6th Sep 2018
//Lougu.org P3758
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;const int mod=2017;
int n,m,t,ans;
struct Matrix {int a[31][31];Matrix() { memset(a,0,sizeof(a)); }Matrix(int b[31][31]) { memcpy(a,b,sizeof(a)); }friend Matrix operator * (const Matrix x,const Matrix y) {Matrix ret;for(int i=0; i<=30; ++i) for(int j=0; j<=30; ++j) for(int k=0; k<=30; ++k) {ret.a[i][j]=(ret.a[i][j]+(x.a[i][k]*y.a[k][j]))%mod;}return ret;}
}H,L;int main()
{scanf("%d%d",&n,&m);int x,y;for(int i=1; i<=m; ++i) {scanf("%d%d",&x,&y);H.a[x][y]=H.a[y][x]=1;}for(int i=0; i<=n; ++i) H.a[i][0]=1, H.a[i][i]=1;for(int i=0; i<=n; ++i) L.a[i][i]=1;scanf("%d",&t);while( t ) {if( t&1 ) L=L*H;t>>=1; H=H*H;}for(int i=0; i<=n; ++i)ans=(ans+L.a[1][i])%mod;printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/cytus/p/9600437.html

洛谷P3758/BZOJ4887 [TJOI2017] 可乐 [矩阵快速幂]相关推荐

  1. 洛谷P3390 【模板】矩阵快速幂

    传送门 从今天开始学习矩阵快速幂.jpg 1 //minamoto 2 #include<iostream> 3 #include<cstdio> 4 #include< ...

  2. [TJOI2017]可乐(矩阵快速幂)

    题目描述 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的1号城市上.这个可乐机器人有三种行为: 停在原地,去下一个相邻的城市,自爆.它每一秒都会随机 ...

  3. BZOJ4887:[TJOI2017]可乐(矩阵乘法)

    Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且 放在了加里敦星球的1号城市上.这个可乐机器人有三种行为:停在原地,去下一个相邻的 城市,自爆. ...

  4. 洛谷P3758 [TJOI2017]可乐

    原题链接:洛谷P3758 [TJOI2017]可乐  题目描述 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的1号城市上.这个可乐机器人有三种行为: ...

  5. 洛谷 P3758 [TJOI2017]可乐

    洛谷 P3758 [TJOI2017]可乐 Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的1号城市上.这个可乐机器人有三种行 ...

  6. 【洛谷P3390】 矩阵快速幂(模板)

    贴一下矩阵快速幂的模板 #include<iostream> #include<cstdio> #include<cstring> #include<stri ...

  7. 洛谷P1939 【模板】矩阵加速(数列)

    题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. 输入格式 第一行一个整数T,表示询 ...

  8. 矩阵快速幂(矩阵加速)

    //南昌理工ACM集训队 放心食用 矩阵加速 快速幂(前置技能) 矩阵快速幂 可乐 附个模板 最后小结 本人小白如有不对欢迎指正ლ(╹◡╹ლ) 矩阵加速 快速幂(前置技能) 对于普通的求a的b次方,一 ...

  9. 快速幂、矩阵快速幂、快速乘法

    快速幂 快速幂是我们经常用到的一种算法,快速幂顾名思义就是快速的幂运算.我们在很多题目中都会遇到幂运算,但是在指数很大的时候,我们如果用for或者是pow就会超时,这时候就用到了快速幂. 快速幂的原理 ...

最新文章

  1. 日10亿级处理,基于云的微服务架构
  2. 教你掌握经典机器学习算法背后原理,解决代码模型参数问题!
  3. 解析《中国互联网软件测试行业2018年度调研报告》
  4. DIP原则、IoC以及DI
  5. ubuntu16.04安装pycharm,并设置快捷启动方式
  6. 合成器插件Serum 1.23b7绿化版亲测有效
  7. iWebOffice
  8. SplitContainer控件扩展之收缩面板
  9. ICTCLAS 汉语词性标注集 中科院
  10. mysql的tps是什么意思_Mysql数据库的QPS和TPS的意义和计算方法
  11. 家庭财务管理系统的设计与实现(Java毕业设计-Springboot)
  12. ParticleDesigner 粒子编辑器使用
  13. mysql 设置 utc_关于时间:MySQL应该将其时区设置为UTC吗?
  14. 《青春有你2》选手信息爬取
  15. golang 根据生日计算星座和属相
  16. Placement Rules 使用文档
  17. 【大数据入门核心技术-Tez】(三)Tez与Hive整合
  18. Web前端开发技术:实验14-16
  19. 硬汉内贾德:让美国人战栗(推荐)
  20. 00014__广州市来穗人员积分制服务管理申办指南

热门文章

  1. 使用 U 盘启动盘安装 Windows 7 旗舰版系统
  2. windows7旗舰版主蓝色海洋 Windows7主题蓝色大海
  3. 10月27号吃鸡服务器维护吗,10月27日正式服维护公告
  4. 4G LTE频带划分和国内运行商资源分配
  5. 初学编程,放弃C++而选择C语言,究竟选对了还是选错了?
  6. greenplum使用总结之常用SQL及函数
  7. 【转】Xamarin.Android 入门之:Xamarin+vs2015 环境搭建
  8. 泡沫破裂的经济学原理
  9. linux系统安装pe,Linux下制作Linux+WINPE启动盘装机必备:
  10. 计算机科学与基础 简答题,计算机科学基础习题与解析