题目描述

加里敦星球的人们特别喜欢喝可乐。因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的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。



这道题我们可以从邻接矩阵的幂的意义考虑。

设现在有一个邻接矩阵AA。

那么A^kAk的意义是什么?(两个点之间若有边则A[u][v]=1A[u][v]=1)

从floydfloyd算法的角度考虑,不难发现A^kAk的第ii行第jj列的数字含义是从ii到jj经过kk步的路径方案总数。

从这个角度考虑,这个点就有了一种做法。

首先将这个图的邻接矩阵建出来,然后直接算这个矩阵的kk次方。

最后统计\sum\limits_{i=1}^{n}A[1][i]i=1∑n​A[1][i]就是答案。

那么在原地停留和自爆怎么处理?

在原地停留很简单,我们只要认为每个点都有一个从自己到自己的自环即可。

那自爆呢?

我们可以将自爆这个状态也看成一个城市,就设它为编号00。

我们在邻接矩阵上从每个点都向这个点连一条边,这个点除了自己外不连其他出边。

这样就满足了任何一个点随时可以自爆,且无法恢复到其他状态。

最后,统计答案。



 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cstdlib>
 4 #include<cctype>
 5 #include<cmath>
 6 #include<iostream>
 7 #include<algorithm>
 8 #include<vector>
 9 #include<set>
10 #include<map>
11 #include<queue>
12 #include<stack>
13 typedef long long ll;
14 typedef unsigned long long ull;
15 using namespace std;
16 const int P=2017;
17 struct Matrix{
18     int a[31][31];
19     inline Matrix operator * (const Matrix &rhs)
20     {
21         Matrix ret;
22         memset(&ret,0,sizeof ret);
23         for(int i=0;i<=30;i++)
24             for(int j=0;j<=30;j++)
25                 for(int k=0;k<=30;k++)
26                     (ret.a[i][j]+=a[i][k]*rhs.a[k][j]%P)%=P;
27         return ret;
28     }
29 }mp;
30 Matrix ksm(Matrix &a,int b)
31 {
32     Matrix ret;
33     memset(&ret,0,sizeof ret);
34     for(int i=0;i<=30;i++) ret.a[i][i]=1;
35     while(b)
36     {
37         if(b&1) ret=ret*a;
38         a=a*a;b>>=1;
39     }
40     return ret;
41 }
42 int u,v,n,m,t;
43 int main()
44 {
45     scanf("%d%d",&n,&m);
46     for(int i=1;i<=m;i++)
47     {
48         scanf("%d%d",&u,&v);
49         mp.a[u][v]=1;mp.a[v][u]=1;
50     }
51     for(int i=0;i<=n;i++)
52         mp.a[i][i]=1;
53     for(int i=1;i<=n;i++) mp.a[i][0]=1;
54     int ans=0;
55     scanf("%d",&t);
56     Matrix anss=ksm(mp,t);
57     for(int i=0;i<=n;i++) (ans+=anss.a[1][i])%=P;
58     printf("%d\n",ans);
59 }

转载于:https://www.cnblogs.com/zhangbuang/p/10336004.html

[TJOI2017]可乐(矩阵快速幂)相关推荐

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

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

  2. 快速幂+矩阵快速幂模板

    快速..运算 快速幂 运用位运算 代码 分析 矩阵快速幂 题目 分析 代码 拓一..: 快速幂 运用位运算 强大的位运算把我搞得蒙蒙的 理解了之后我表示很喜欢!!! 代码 int power(int ...

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

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

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

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

  5. 矩阵快速幂+构造方法

    与快速幂一样,可以将递推式通过二进制的方式来进行优化,这个学了快速幂就是十分容易理解 大概的板子如下: struct mat///自己定义大小的矩阵 {ll m[11][11]; }; mat mul ...

  6. 【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂

    原文链接 https://www.cnblogs.com/cly-none/p/SRM701Div1C.html 题意:定义"Fibonacci string"为没有连续1的01串 ...

  7. 快速幂 + 矩阵快速幂

    快速幂 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #define LL lo ...

  8. HDU4549(矩阵快速幂+快速幂)

    f(n)=a^f(n-1) + b^f(n-2):计算矩阵部分用矩阵快速幂:计算a的幂次和b的幂次用快速幂. #include<iostream> #include<algorith ...

  9. [HNOI2008]GT考试[矩阵快速幂+kmp优化的dp]

    解题思路:假如说我们用f[i]表示长度为i的串能组合成无不吉利数字的组合的个数的话我们无法找到f[i]和f[i+1]的关系,就是我们下一位填某个数字会不会出现不吉利串,这就和你前面的串末尾于不吉利串重 ...

最新文章

  1. 倍增LCA NOIP2013 货车运输
  2. R语言与数据分析(9)R与Excel
  3. Py之dlib:Python库之dlib库的简介、安装、使用方法详细攻略
  4. Winform中设置ZedGraph鼠标悬浮显示距离最近曲线上的点的坐标值和X轴与Y轴的标题
  5. 关于DruidStatView监控信息
  6. 干不掉的钉钉:从哪来,往哪去?
  7. mysql索引类型 normal, unique, full text
  8. S3C2440裸奔篇之MMU
  9. 大学生研究生必备的数据竞赛平台
  10. 计算机编程语言分类与区别
  11. 很值得看看的中文翻译The Django Book
  12. 计算机考试用户注册,全国计算机等级考试报名系统账号注册和登录
  13. 无人机设计过程中的计算和假设
  14. 使用u盘量产工具修复写保护的u盘
  15. 【Java练习】图书管理系统【详解篇15+完整代码】
  16. 世界观的内涵是认识论模型
  17. python《pandas入门》实现Excel数据字段的拆分
  18. 基于tensorflow2.0的深度学习 一
  19. kind:Kubernetes in Docker,单机运行 Kubernetes 群集的最佳方案?
  20. 北京博奥智源,浅谈术语管理服务器软件开发所需功能设计

热门文章

  1. python3爬取淘女郎图片
  2. 【寻找最佳小程序】04期 :探访“小打卡”产品打磨细节及线下场景真实应用...
  3. 杨致远:雅虎的华裔酋长(附图)
  4. 京东网页版静态页面的几个问题
  5. 2022年全球及中国农业微生物行业头部企业市场占有率及排名调研报告
  6. 施密特正交方法例题(用于学习)
  7. idea Translation IP 地址无法访问
  8. 【简易实用】源生js瀑布流示列
  9. 贪心算法-数列极差问题-JAVA
  10. 【转】C#sm2签名验签实现