题目简洁明了(一点都不好伐)

照例,化简题目

给一张图,每一个时间点有一些点不能走,(有周期性),求从起点第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]沼泽鳄鱼(邻接矩阵,快速幂)的更多相关文章

  1. [luogu2579 ZJOI2005] 沼泽鳄鱼(矩阵快速幂)

    传送门 题目描述 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎然,引来不少游客. 为了让游玩更有情趣,人们在池塘的中央建设了几座石 ...

  2. P2579 [ZJOI2005]沼泽鳄鱼(矩乘)

    P2579 [ZJOI2005]沼泽鳄鱼 没有食人鱼:直接矩乘优化 有食人鱼:食人鱼周期2.3.4,公倍数12,可以以12为一个周期矩乘,剩下的暴力 注意矩乘不满足乘法交换律,一定要注意乘的顺序 #i ...

  3. bzoj 1898 [Zjoi2005]Swamp 沼泽鳄鱼——矩阵快速幂

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 当然是邻接矩阵做转移矩阵来快速幂. 对于鳄鱼,好在它们周期的lcm是12,也就是每12 ...

  4. bzoj1898 [Zjoi2005]Swamp 沼泽鳄鱼——矩阵快速幂

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 求到达方案数...还是矩阵快速幂: 能够到达就把邻接矩阵那里赋成1,有鳄鱼的地方从各处 ...

  5. BZOJ1898: [Zjoi2005]Swamp 沼泽鳄鱼(矩阵快速幂)

    题意 题目链接 Sol 不难发现吃人鱼的运动每\(12s\)一个周期 所以暴力建12个矩阵,放在一起快速幂即可 最后余下的部分暴力乘 #include<bits/stdc++.h> usi ...

  6. HDU 2157 How many ways?? (邻接矩阵快速幂)

    http://acm.hdu.edu.cn/showproblem.php?pid=2157 题意 : 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值   从这道题 ...

  7. BZOJ 1898 沼泽鳄鱼(矩阵快速幂)

    没有食人鱼不是裸题吗,用一个向量表示从s到1..N的距离,然后不停乘邻接矩阵行了,当然快速幂 有食人鱼,发现食人鱼最多十二个邻接矩阵一循环,处理出12个作为1个然后快速幂行了   怎么处理呢? 假设食 ...

  8. P2579 [ZJOI2005]沼泽鳄鱼

    传送门 话说邻接矩阵居然还能快速幂的么-- 把原图的邻接矩阵\(G\)打出来,那么\(G[u][v]\)表示一秒后\(u\)到\(v\)的方案数,\(G^2[u][v]\)表示\(2\)秒后的方案数- ...

  9. 题解-[ZJOI2005]沼泽鳄鱼

    题解-[ZJOI2005]沼泽鳄鱼 前置知识: 邻接矩阵 矩阵乘法 矩阵快速幂 [ZJOI2005]沼泽鳄鱼 给一个有 \(N\) 个点,\(M\) 条双向边的图 \(G\),其中有 \(NFish\ ...

随机推荐

  1. 前端之CSS基础及使用方法

    CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS语法 CSS实例 ...

  2. 分享:JS视频在线视频教程

    作者说明 (1)JS说明 JS是非常重要的一门语言,但是,我们对JS的认识似乎仍然停留在“hello word”或者“alert”的观念上.其实,JS发展到现在已经非常的成熟,功能也非常的强大,因此, ...

  3. 记录JS如何使用广度遍历找到节点的所有父节点

    我们在实际的工作业务场景中经常遇到这样的场景,求取树数据中某个节点的父亲节点以及所有的父亲节点,这样的场景下不建议使用深度遍历,使用广度遍历可以更快找到. 1.案例解说 比如树的长相是这样的: 树的数 ...

  4. 重新整理django中Auth模块

    0907自我总结 重新整理django中Auth模块 from django.contrib import auth 一.设置 默认Auth表单 auth默认是使用自带的user表单 自定义Auth表 ...

  5. LInux下npm install 安装失败问题

    现象: 今天公司自己动部署的Jenkins出现了问题,在执行npm install的时候,失败了,下载不到npm,在查阅了各种报错信息之后还是没有解决,发现用淘宝镜像进行安装时,也会有安装不成功的情况 ...

  6. C# Halcon混合编程中遇到的问题(一)

    目标平台 安装64位的halcon的情况下,目标平台必须使用x64而不能使用x86 目标框架 不能使用.Net Framework Client版本,有一些必须的程序集会缺失,测试使用.Net Fra ...

  7. JS单例对象与构造函数对象的区别

    JavaScript对象有几种: 内置对象如Global,Math对象等等. 本地对象如Object.Function.Array.String.Boolean.Number.Date.RegExp. ...

  8. Web登录中的信心安全问题

    1. 一个简单的HTML例子看看用户信息安全 标准的HTML语法中,支持在form表单中使用<input></input>标签来创建一个HTTP提交的属性,现代的WEB登录中, ...

  9. C#+Selenium抓取百度搜索结果前100网址

    需求 爬取百度搜索某个关键字对应的前一百个网址. 实现方式 VS2017 + Chrome .NET Framework + C# + Selenium(浏览器自动化测试框架) 环境准备 创建控制台应 ...

  10. 使用Redis在Hibernate中进行缓存

    Hibernate是Java编程语言的开放源代码,对象/关系映射框架.Hibernate的目标是帮助开发人员摆脱许多繁琐的手动数据处理任务.Hibernate能够在Java类和数据库表之间以及Java ...