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

Solution

一开始傻了在想DP
后来才发现这是个矩阵快速幂模板题……
把邻接矩阵做t次幂,邻接矩阵a[i][j]的意义就成了从i走到j的方案数
这个题只需要把每个点的自爆引一条单向边到n+1就好了,停留就连一条自环

Code

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #define MOD (2017)
 5 using namespace std;
 6
 7 int n,m,ans,u,v,t;
 8
 9 struct Matrix
10 {
11     int m[32][32];
12     void clear(){memset(m,0,sizeof(m));}
13 }A,G;
14
15 Matrix operator * (Matrix a,Matrix b)
16 {
17     Matrix ans; ans.clear();
18     for (int i=1; i<=n+1; ++i)
19         for (int j=1; j<=n+1; ++j)
20             for (int k=1; k<=n+1; ++k)
21                 (ans.m[i][j]+=a.m[i][k]*b.m[k][j])%=MOD;
22     return ans;
23 }
24
25 Matrix Qpow(Matrix a,int p)
26 {
27     Matrix ans; ans.clear();
28     for (int i=1; i<=n+1; ++i) ans.m[i][i]=1;
29     while (p)
30     {
31         if (p&1) ans=ans*a;
32         a=a*a; p>>=1;
33     }
34     return ans;
35 }
36
37 int main()
38 {
39     scanf("%d%d",&n,&m);
40     for (int i=1; i<=m; ++i)
41     {
42         scanf("%d%d",&u,&v);
43         G.m[u][v]=G.m[v][u]=1;
44     }
45     for (int i=1; i<=n+1; ++i)
46         G.m[i][n+1]=1,G.m[i][i]=1;
47     scanf("%d",&t);
48     G=Qpow(G,t);
49     for (int i=1; i<=n+1; ++i)
50         (ans+=G.m[1][i])%=MOD;
51     printf("%d",ans);
52 }

转载于:https://www.cnblogs.com/refun/p/9380785.html

BZOJ4887:[TJOI2017]可乐(矩阵乘法)相关推荐

  1. 【bzoj4887】[Tjoi2017]可乐 矩阵乘法

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

  2. 洛谷P3758/BZOJ4887 [TJOI2017] 可乐 [矩阵快速幂]

    洛谷传送门,BZOJ传送门 可乐 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 299  Solved: 207 Description 加里敦星球的 ...

  3. bzoj4887: [Tjoi2017]可乐(矩阵乘法+快速幂)

    题目传送门 . 解法: 这种题都是矩阵乘法吧. f[i][t]表示第t秒在i的方案. 那么f[i][t]可以转移f[i][t+1]和能够与i相连的边. 那么这个转移可以看作一个转移矩阵. 首先矩阵的( ...

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

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

  5. 洛谷P3758 [TJOI2017]可乐

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

  6. 洛谷 P3758 [TJOI2017]可乐

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

  7. 5分钟搞懂矩阵乘法的本质

    大家好啊,我是董董灿. 很多与深度学习算法相关的面试,面试官可能都会问一类问题,那就是你是如何理解矩阵乘算法的. 更有甚者,会让你当场手写矩阵乘算法,然后问细节,问如何优化,面试现场,残忍至极. 那矩 ...

  8. 如何在CPU上优化GEMM矩阵乘法

    如何在CPU上优化GEMM矩阵乘法 How to optimize GEMM on CPU (TL;DR) TVM 提供抽象接口,允许用户分别描述算法和算法的实现组织(所谓的调度).通常,在高性能调度 ...

  9. CPU的自动调度矩阵乘法

    CPU的自动调度矩阵乘法 这是一个有关如何对CPU使用自动调度程序的文档. 与依靠手动模板定义搜索空间的基于模板的autotvm不同,自动调度程序不需要任何模板.用户只需要编写计算声明,而无需任何调度 ...

最新文章

  1. Android监听左右滑删除通知,Android 滑动监听RecyclerView线性流+左右划删除+上下移动...
  2. Core Animation
  3. jvm调优:GC日志格式
  4. 【Tools】Visual Studio 2017下载和安装
  5. winscp使用密钥登录远程linux系统
  6. 任正非采访的数据分析解读
  7. bzoj1051 受欢迎的牛 结论+tarjan
  8. java命令行执行编译好的类_Java命令行编译并执行Java程序
  9. Redis连接池Lettuce Jedis 区别
  10. Altium AD20大电流表层开窗,用特殊粘贴复制平面区域到其他层,阻焊开窗显示沉金LOGO
  11. 复合选择器-focus选择器(HTML、CSS)
  12. ba无标度网络python_python绘制BA无标度网络示例代码
  13. 智慧路灯控制系统解决方案
  14. 【学习】FaceForensics++: Learning to Detect Manipulated Facial Images
  15. 时空数据生成对抗网络研究综述(下)
  16. 自定义按键鼠标,献给电脑重度的江湖人
  17. postgresql 数据库健康巡检 报告
  18. 疫情重压下,屈臣氏为何上半年仍盈利?
  19. 微信企业号接入微信支付
  20. 使用Tesseract训练lang文件并OCR识别集装箱号

热门文章

  1. 视频教程-Android Studio 开发详解-Android
  2. android studio教程,Android Studio一个完整的APP实例
  3. 读研期间发84篇SCI!研究生被怀疑有“背景”和学术造假,本人回应!
  4. 百家讲坛-《人类的起源》 吴新智
  5. 平台梯子行业调研报告 - 市场现状分析与发展前景预测
  6. 渗透攻击exp共享站点(建议收藏❤️)
  7. GitFlow Workflow
  8. pku1036Gangsters Dp
  9. 赛尔五镜头倾斜相机|始于颜值 终于科技
  10. CCF基于买方意向的货物撮合交易--Rank6开源