题目链接

  一开始想到这可能能用矩阵优化,但以为暴力就能卡过……T成二十分

  首先我们回顾一下我们的暴力转移方程

  用f[i][j][0/1]表示在i时刻,j点,1不爆炸,0已爆炸的方案数,那么f[i][j][0]=f[i-1][j][0]+f[i-1][j][1],f[i][j][1]=f[i-1][j][1]+f[i-1][k][1](其中k表示与j相邻的点)。

  然后我们看f[i][j][1]=f[i-1][j][1]+f[i-1][k][1]这个式子

  如果设定j和j相连,就化简为f[i][j][1]=f[i-1][k][1]

  然后就可以用矩阵乘法啦

  考虑到f[i][j][0]的求法,发现这是一个关于f[i-1][j][1]的和

  而我们发现f[i-1][j][1]是一串矩阵等比数列

  于是应用等比数列求和公式

  

#include<algorithm>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#define mod 2017 inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} int n,m; struct Matrix{
long long s[][];
Matrix(){memset(s,,sizeof(s)); }
Matrix operator *(const Matrix &a){
Matrix ans;
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
for(int k=;k<=n;++k)
ans.s[i][j]=(ans.s[i][j]+(s[i][k]*a.s[k][j])%mod)%mod;
return ans;
}
Matrix operator +(const Matrix &a){
Matrix ans;
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
ans.s[i][j]=(s[i][j]+a.s[i][j])%mod;
return ans;
}
}; Matrix Pow(Matrix x,int p){
Matrix ans;
for(int i=;i<=n;++i) ans.s[i][i]=;
while(p){
if(p&) ans=ans*x;
x=x*x;
p>>=;
}
return ans;
} Matrix Sum(Matrix x,int p){
Matrix ans;
if(!p) return ans;
for(int i=;i<=n;++i) ans.s[i][i]=;
ans=ans+Pow(x,p>>); ans=ans*Sum(x,p>>);
if(p&) ans=ans+Pow(x,p);
return ans;
} int q[][];
Matrix Start;
int ans; int main(){
n=read(),m=read();
for(int i=;i<=m;++i){
int from=read(),to=read();
q[from][to]=q[to][from]=;
}
for(int i=;i<=n;++i) q[i][i]=;
for(int i=;i<=n;++i)
for(int j=;j<=n;++j) Start.s[i][j]=q[i][j];
int t=read();
Matrix now; now=Pow(Start,t);
for(int i=;i<=n;++i) ans=(ans+now.s[i][])%mod;
Matrix sum; sum=Sum(Start,t -);
for(int i=;i<=n;++i) sum.s[i][i]=(sum.s[i][i]+)%mod;
for(int i=;i<=n;++i) ans=(ans+sum.s[i][])%mod;
printf("%d",ans);
return ;
}

【Luogu】P3758可乐(矩阵优化DP)的更多相关文章

  1. $[TJOI2017]$ 可乐 矩阵优化$dp$

    \(Sol\) 设\(f_i\)为到第\(i\)秒的方案数,显然\(f_i=\)在第\(i\)秒前爆炸的方案数+在第\(i\)秒爆炸的方案数+在第\(i\)秒停下的方案数+在第\(i\)秒走向下一个城 ...

  2. 矩阵优化dp

    链接:https://www.luogu.org/problemnew/show/P1939 题解: 矩阵优化dp模板题 搞清楚矩阵是怎么乘的构造一下矩阵就很简单了 代码: #include < ...

  3. bzoj 3120 矩阵优化DP

    我的第一道需要程序建矩阵的矩阵优化DP. 题目可以将不同的p分开处理. 对于p==0 || p==1 直接是0或1 对于p>1,就要DP了.这里以p==3为例: 设dp[i][s1][s2][r ...

  4. HDU - 2294: Pendant(矩阵优化DP&前缀和)

    On Saint Valentine's Day, Alex imagined to present a special pendant to his girl friend made by K ki ...

  5. [六省联考2017]组合数问题 (矩阵优化$dp$)

    题目链接 Solution 矩阵优化 \(dp\). 题中给出的式子的意思就是: 求 nk 个物品中选出 mod k 为 r 的个数的物品的方案数. 考虑朴素 \(dp\) ,定义状态 \(f[i][ ...

  6. 矩阵优化DP类问题应用向小结

    前言 本篇强调应用,矩阵的基本知识有所省略(也许会写篇基础向...). 思想及原理 为什么Oier们能够想到用矩阵来加速DP呢?做了一些DP题之后,我们会发现,有时候DP两两状态之间的转移是定向的,也 ...

  7. [Sdoi2017]序列计数 矩阵优化dp

    题目 https://www.lydsy.com/JudgeOnline/problem.php?id=4818 思路 先考虑没有质数限制 dp是在同余系下的,所以\(f[i][j]\)表示前i个点, ...

  8. bzoj 1009 [HNOI2008]GT考试——kmp+矩阵优化dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1009 首先想到 确保模式串不出现 就是 确保每个位置的后缀不是该模式串. 为了dp,需要记录 ...

  9. 洛谷P3193 GT考试 kmp+矩阵优化dp

    题意 求\(N\)位数字序列(可以有前导0)中不出现某\(M\)位子串的个数,模\(K\). \(N<=10^9,M<=20,K<=1000\) 分析 设\(dp[i][j]\)表示 ...

随机推荐

  1. xp密钥

    Windows XP 专业版 : CCC64-69Q48-Y3KWW-8V9GV-TVKRM

  2. 利用UnblockNeteaseMusic实现网易云破版权,并实现shell可快速访问

    注:本篇包含mac及windows下安装方式详细 mac安装 前提:安装有node环境,可参考 mac下安装nodejs 安装 下载git代码到本地 git clone https://github. ...

  3. C++拾遗(一)——变量和基本类型

    今天看到一个小小的算法,交换两个数却不引入中间变量,想了下没什么思路.看了答案是这样: int a, b; a = a + b; b = a - b; a = a - b; 感觉还是挺有想法的,借此也 ...

  4. 线程池 Threadlocal 使用注意

    线程池中的线程是重复使用的,即一次使用完后,会被重新放回线程池,可被重新分配使用. 因此,ThreadLocal线程变量,如果保存的信息只是针对一次请求的,放回线程池之前需要清空这些Threadloc ...

  5. .Net Mvc 返回Json,动态生成EasyUI Tree

    最近做一个项目,开始接触EasyUI,感觉很强大,很适合我这种对前台不是很感冒的人.在学习Tree的过程中,感觉网上的资料挺乱的,很多只是把EasyUI API 抄了一遍.现在把最近这段时间的学到的, ...

  6. COGS 133. [USACO Mar08] 牛跑步

    ★★★   输入文件:cowjog.in   输出文件:cowjog.out   简单对比时间限制:1 s   内存限制:128 MB Bessie准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她 ...

  7. 洛谷 2543 [AHOI2004]奇怪的字符串

    题目描述 输入输出格式 输入格式: 输入文件中包含两个字符串X和Y.当中两字符串非0即1.序列长度均小于9999. 输出格式: X和Y的最长公共子序列长度. 输入输出样例 输入样例#1: 010101 ...

  8. 洛谷 P2916 [USACO08NOV]为母牛欢呼Cheering up the Cows

    题目描述 Farmer John has grown so lazy that he no longer wants to continue maintaining the cow paths tha ...

  9. iOS 查看包架构信息

    lipo -info libUMSocial_Sdk_4.2.a 查看包架构信息

  10. jni 开发

    创建android工程 -> 添加native 函数 添加库之后: 1. 用javah 生成c语言.h头文件时, 在cmd 窗口中cd 到bin/classes 目录下执行下代码无效: java ...