[TJOI2017]可乐
题目描述
加里敦星球的人们特别喜欢喝可乐。因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的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取模后的结果。
输入输出样例
3 2
1 2
2 3
2
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^9。
设f[i][j][0/1]表示i时刻,j地,是否爆炸
f[i][j][0]=∑f[i-1][k][0]+f[i-1][j][0]
f[i][j][1]=f[i-1][j][1]+f[i-1][j][0]
但直接dp显然超时,考虑用矩阵
(s0,s1,s2,s3.....)
s0为已爆炸的方案,s1表示到1的方案
转移:
s0=s0'+s1'+s2'......+sn'
s1=s1'+sk'
.....
所以可以写成一个(n+1)*(n+1)的矩阵
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct Matrix
{
long long a[][];
}Mat,pre,ans;
int n,m,t;
long long s;
Matrix operator *(const Matrix &x,const Matrix &y)
{
Matrix res;
int i,j,k;
memset(res.a,,sizeof(res.a));
for (i=;i<=n;i++)
{
for (j=;j<=n;j++)
{
for (k=;k<=n;k++)
res.a[i][j]+=x.a[i][k]*y.a[k][j];
res.a[i][j]%=;
}
}
return res;
}
void qpow(int x)
{int i;
for (i=;i<=n;i++)
ans.a[i][i]=;
while (x)
{
if (x&) ans=ans*Mat;
Mat=Mat*Mat;
x/=;
}
}
int main()
{int x,y,i;
cin>>n>>m;
for (i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
Mat.a[x][y]=;
Mat.a[y][x]=;
}
cin>>t;
for (i=;i<=n;i++)
Mat.a[i][i]=;
for (i=;i<=n;i++)
Mat.a[i][]=;
memset(pre.a,,sizeof(pre.a));
qpow(t);
pre.a[][]=;
ans=pre*ans;
for (i=;i<=n;i++)
s+=ans.a[][i],s%=;
cout<<s;
}
[TJOI2017]可乐的更多相关文章
- 【BZOJ4887】[TJOI2017]可乐(矩阵快速幂)
[BZOJ4887][TJOI2017]可乐(矩阵快速幂) 题面 BZOJ 洛谷 题解 模板题??? #include<iostream> #include<cstdio> # ...
- 【bzoj4887】:[Tjoi2017]可乐 矩阵乘法,快速幂
[bzoj4887]:[Tjoi2017]可乐 题目大意:一张无相连通图(n<=30),从1号点开始走,每秒可以走到相邻的点也可以自爆,求第t秒(t<=1e6)后所有的方案数是多少对201 ...
- 洛谷P3758 - [TJOI2017]可乐
Portal Description 给出一张\(n(n\leq30)\)个点\(m(m\leq100)\)条边的无向图.初始时有一个可乐机器人在点\(1\),这个机器人每秒会做出以下三种行为之一:原 ...
- Luogu 3758 [TJOI2017]可乐(有向图邻接矩阵幂的意义 矩阵快速幂)
题目描述 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的1号城市上.这个可乐机器人有三种行为: 停在原地,去下一个相邻的城市,自爆.它每一秒都会随机 ...
- BZOJ4887: [Tjoi2017]可乐 矩阵快速幂
Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且 放在了加里敦星球的1号城市上.这个可乐机器人有三种行为:停在原地,去下一个相邻的 城市,自爆. ...
- P3758 [TJOI2017]可乐
题目描述 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的1号城市上.这个可乐机器人有三种行为: 停在原地,去下一个相邻的城市,自爆.它每一秒都会随机 ...
- 洛谷P3758/BZOJ4887 [TJOI2017] 可乐 [矩阵快速幂]
洛谷传送门,BZOJ传送门 可乐 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 299 Solved: 207 Description 加里敦星球的人 ...
- [BZOJ4887][TJOI2017]可乐(DP+矩阵快速幂)
题目描述 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的1号城市上.这个可乐机器人有三种行为: 停在原地,去下一个相邻的城市,自爆.它每一秒都会随机 ...
- BZOJ4887:[TJOI2017]可乐(矩阵乘法)
Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且 放在了加里敦星球的1号城市上.这个可乐机器人有三种行为:停在原地,去下一个相邻的 城市,自爆. ...
随机推荐
- mysql数据库导入sql文件时提示“Error Code: 1153 - Got a packet bigger than 'max_allowed_packet' bytes”解决办法
向mysql数据库中导入sql文件时,如果文件过大(几百M),会提示"Error Code: 1153 - Got a packet bigger than 'max_allowed_pac ...
- alpha冲刺第五天
一.合照 二.项目燃尽图 三.项目进展 调整了一些界面的布局 细化了部分小功能的界面 注册界面和服务器响应了,但是在insert数据库方面出现了错误 四.明日规划 继续研究如何将注册的内容插入数据库 ...
- python中使用flask时遇到的markupsafe._compat包缺失的问题与解决
环境:windows7 + python3.6.0 在尝试使用python的flask时,按照flask的tutorial操作,装好flask.venv后,对tutorial中的hello.py进行运 ...
- Struts2之Action的实现
对于Struts2框架来说,最重要的莫过于Action类的编写,类比于Servlet,Action类也是通过类的实例对象调用方法来处理请求的,Action类的实例对象是由Struts2的核心Filte ...
- 再议Python协程——从yield到asyncio
协程,英文名Coroutine.前面介绍Python的多线程,以及用多线程实现并发(参见这篇文章[浅析Python多线程]),今天介绍的协程也是常用的并发手段.本篇主要内容包含:协程的基本概念.协程库 ...
- nyoj 韩信点兵
描述相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排.五人一排.七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了.输入3个非负整数a,b,c ,表示每种队形排尾的人数 ...
- python random 模块的用法
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- spring MVC中定义异常页面
如果我们在使用Spring MVC的过程中,想自定义异常页面的话,我们可以使用DispatcherServlet来指定异常页面,具体的做法很简单: 下面看我曾经的一个项目的spring配置文件: 1 ...
- jquery下关于input和label的关于点击事件的坑
待填坑: 法院费用结算页面的案件类型
- 基于哈夫曼编码的文件压缩(c++版)
本博客由Rcchio原创 我了解到很多压缩文件的程序是基于哈夫曼编码来实现的,所以产生了自己用哈夫曼编码写一个压缩软件的想法,经过查阅资料和自己的思考,我用c++语言写出了该程序,并通过这篇文章来记录 ...