P2579 [ZJOI2005]沼泽鳄鱼(邻接矩阵,快速幂)
题目简洁明了(一点都不好伐)
照例,化简题目
给一张图,每一个时间点有一些点不能走,(有周期性),求从起点第k秒恰好在终点的方案数,可重复,不可停留。
额dp实锤
于是就被打脸了....
有一种东西叫做邻接矩阵,还有一种东西叫做矩阵乘法,bk201大仙曾经讲过,能用邻接矩阵的k次方求这个东西。
那,难度下降了很多了。
但是,对于那周期是3,4,6的鳄鱼怎么办呢?
答案就是:
观察3,4,6,lcm(3,4,6)=12,所以,当k%12==0,鳄鱼们都回到了原状态。
所以,我们就暴力地对于每一种情况建一个邻接矩阵,把不能走的点刨掉,然后把他们依次乘起来(因为不满足交换律)
然后把它给k次方就行了。。。
值得注意的地方:
1、因为点是从0开始,所以根据我的习惯,都加上了1;
2、不满足交换律不满足交换律不满足交换律
3、k不一定整除12,所以在剩余的那一部分要手动乘一下初始矩阵
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=;
const int mod=;
int m,n,st,en,K,fn;
int map[maxn][maxn];
int unable[maxn][maxn];
struct node
{
int a[maxn][maxn];
node()
{
memset(a,,sizeof(a));
}
}q,w[];
inline node operator * (const node& x,const node& y)
{
node z;
for(int i=;i<=n;i++)
{
for(int k=;k<=n;k++)
{
for(int j=;j<=n;j++)
{
z.a[i][j]=(z.a[i][j]+x.a[i][k]*y.a[k][j])%mod;
}
}
}
return z;
}
node ksm(node x,int y)
{
node z;
for(int i=;i<=n;i++)
z.a[i][i]=;
while(y)
{
if(y&)
z=z*x;
x=x*x;
y>>=;
}
return z;
} int main()
{
scanf("%d%d%d%d%d",&n,&m,&st,&en,&K);
st++;en++;
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
x++;y++;
map[x][y]=map[y][x]=;
}
scanf("%d",&fn);
while(fn--)
{
int x;
scanf("%d",&x);
for(int j=;j<x;j++)
{
int y;
scanf("%d",&y);
y++;
for(int k=j;k<;k+=x)
{
unable[k][y]=true;
}
}
} for(int i=;i<=n;i++)
{
q.a[i][i]=;
}
for(int i=;i<;i++)
{
for(int j=;j<=n;j++)
{
for(int k=;k<=n;k++)
{
w[i].a[j][k]=(map[j][k]&&!unable[i][k]);
}
}
}
for(int i=;i<;i++)
{
q=q*w[i];
}
q=q*w[];
int k=K/,t=K-k*;
node ans;
for(int i=;i<=n;i++)
{
ans.a[i][i]=;
}
ans=ans*ksm(q,k);
for(int i=;i<=t;i++)
ans=ans*w[i];
printf("%d ",ans.a[st][en]);
return ;
}
(完)
P2579 [ZJOI2005]沼泽鳄鱼(邻接矩阵,快速幂)的更多相关文章
- [luogu2579 ZJOI2005] 沼泽鳄鱼(矩阵快速幂)
传送门 题目描述 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎然,引来不少游客. 为了让游玩更有情趣,人们在池塘的中央建设了几座石 ...
- P2579 [ZJOI2005]沼泽鳄鱼(矩乘)
P2579 [ZJOI2005]沼泽鳄鱼 没有食人鱼:直接矩乘优化 有食人鱼:食人鱼周期2.3.4,公倍数12,可以以12为一个周期矩乘,剩下的暴力 注意矩乘不满足乘法交换律,一定要注意乘的顺序 #i ...
- bzoj 1898 [Zjoi2005]Swamp 沼泽鳄鱼——矩阵快速幂
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 当然是邻接矩阵做转移矩阵来快速幂. 对于鳄鱼,好在它们周期的lcm是12,也就是每12 ...
- bzoj1898 [Zjoi2005]Swamp 沼泽鳄鱼——矩阵快速幂
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 求到达方案数...还是矩阵快速幂: 能够到达就把邻接矩阵那里赋成1,有鳄鱼的地方从各处 ...
- BZOJ1898: [Zjoi2005]Swamp 沼泽鳄鱼(矩阵快速幂)
题意 题目链接 Sol 不难发现吃人鱼的运动每\(12s\)一个周期 所以暴力建12个矩阵,放在一起快速幂即可 最后余下的部分暴力乘 #include<bits/stdc++.h> usi ...
- HDU 2157 How many ways?? (邻接矩阵快速幂)
http://acm.hdu.edu.cn/showproblem.php?pid=2157 题意 : 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值 从这道题 ...
- BZOJ 1898 沼泽鳄鱼(矩阵快速幂)
没有食人鱼不是裸题吗,用一个向量表示从s到1..N的距离,然后不停乘邻接矩阵行了,当然快速幂 有食人鱼,发现食人鱼最多十二个邻接矩阵一循环,处理出12个作为1个然后快速幂行了 怎么处理呢? 假设食 ...
- P2579 [ZJOI2005]沼泽鳄鱼
传送门 话说邻接矩阵居然还能快速幂的么-- 把原图的邻接矩阵\(G\)打出来,那么\(G[u][v]\)表示一秒后\(u\)到\(v\)的方案数,\(G^2[u][v]\)表示\(2\)秒后的方案数- ...
- 题解-[ZJOI2005]沼泽鳄鱼
题解-[ZJOI2005]沼泽鳄鱼 前置知识: 邻接矩阵 矩阵乘法 矩阵快速幂 [ZJOI2005]沼泽鳄鱼 给一个有 \(N\) 个点,\(M\) 条双向边的图 \(G\),其中有 \(NFish\ ...
随机推荐
- 从单片机到操作系统⑦——深入了解FreeRTOS的延时机制
>没研究过操作系统的源码都不算学过操作系统 # FreeRTOS 时间管理 时间管理包括两个方面:系统节拍以及任务延时管理. ## 系统节拍: 在前面的文章也讲得很多,想要系统正常运行,那么时钟 ...
- 解决Mac安装tesserocr报错问题 Failed building wheel for
localhost:~ jerry$ Processing /var/www/git/python/tesserocr -bash: Processing: command not found loc ...
- HelloWin详解
(注意:遇到程序在弄懂之后一定要自己去敲,一定要自己去敲,一定要自己去敲) (注意:遇到程序在弄懂之后一定要自己去敲,一定要自己去敲,一定要自己去敲) (注意:遇到程序在弄懂之后一定要自己去敲,一定要 ...
- POWERUP攻击渗透实战2
准备环境: kali linux 攻击机 已获得靶机meterpreter(非管理)权限 win7 靶机 拥有powershell环境 运用到的模块:Get-RegistryAlwaysInstal ...
- vc++中代码段的免杀
一.文件特征码定位: 一般我们先用MyCCL把被查杀文件的文件特征码定位出来,然后用C32判断定位出来的这个特征码是代码还 是字符串,或者是输入表.输出表.版权信息等…定位在不同的地方,就要用不同的方 ...
- [BZOJ29957] 楼房重建 - 线段树
2957: 楼房重建 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 3294 Solved: 1554[Submit][Status][Discus ...
- Cocos2d-x 学习笔记(11.5) SkewTo SkewBy
1. SkewTo SkewBy node朝X和Y方向的歪斜.SkewTo是SkewBy的父类. 1.1 成员变量 create方法 // 两者成员变量一致 float _skewX; float _ ...
- GO实现简单(命令行)工具:sftp,文檔压解,RDS备份,RDS备份下载
GO实现简单(命令行)工具:sftp,文檔压解,RDS备份,RDS备份下载 轉載請註明出處:https://www.cnblogs.com/funnyzpc/p/11721978.html 内容提要: ...
- ElasticSearch安装及使用
ElasticSearch安装及使用 ELK由Elasticsearch.Logstash和Kibana三部分组件组成. Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置 ...
- 如何利用Fiddler4进行Android APP / IOS APP抓包
Fiddler抓包 1.Fiddler介绍 Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据. F ...