题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1898

思路 : 因为是中文题,题意就不过多描述了。食人鱼的活动周期分别是2、3或4,这样可以考虑所有的食人鱼的活动情况一定是最小以12为周期的,这样我们就构造12个矩阵,a[ i ].m[ x ][ y ]每个矩阵表示在第 i 时刻,从第 x 个石墩到第 y 个石墩能不能走,这样将这十二个矩阵相乘,得到第十三个矩阵a[0],对于 K/12 的部分,我们可以直接求 a[0]^(k/12) 得到,对于 K%12 的部分暴力乘起来就好。

code:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define mod 10000int n,m,S,T,K,q;
int pos[5];
struct node
{int m[55][55];
}a[13],b,ans,td;node mul(node a,node b)
{node c;for(int i=0;i<n;i++)for(int j=0;j<n;j++){c.m[i][j] = 0;for(int k=0;k<n;k++)c.m[i][j] = (c.m[i][j] + a.m[i][k]*b.m[k][j]) % mod;}return c;
}node ksm(node aa,int k)
{node ans = td;while(k){if(k & 1)ans = mul(ans,aa);aa = mul(aa,aa);k >>= 1;}return ans;
}int main()
{scanf("%d%d%d%d%d",&n,&m,&S,&T,&K);for(int i=0;i<n;i++) td.m[i][i] = 1;int x,y;for(int i=1;i<=m;i++){scanf("%d%d",&x,&y);for(int j=1;j<=12;j++){a[j].m[x][y]++;a[j].m[y][x]++;}}a[0] = td;scanf("%d",&q);while(q--){int k;scanf("%d",&k);for(int i=1;i<=k;i++)scanf("%d",&pos[i]);if(pos[1] == S || pos[K%k+1] == T){printf("0\n");return 0;}for(int j=0;j<k;j++) pos[j] = pos[j+1];for(int i=1;i<=12;i++){int x = (i-1)%k;for(int j = 0;j<n;j++)a[i].m[pos[x]][j] = 0;}}for(int i=1;i<=12;i++)a[0] = mul(a[0],a[i]);a[0] = ksm(a[0],K/12);K %= 12;b.m[0][S] = 1;b = mul(b,a[0]);for(int i=1;i<=K;i++)b = mul(b,a[i]);printf("%d\n",b.m[0][T]);return 0;
}

BZOJ-1898 Swamp 沼泽鳄鱼相关推荐

  1. BZOJ 1898: [Zjoi2005]Swamp 沼泽鳄鱼 [矩阵乘法]

    1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1082  Solved: 602 [Submit] ...

  2. BZOJ 1898: [Zjoi2005]Swamp 沼泽鳄鱼

    1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1085  Solved: 604 [Submit] ...

  3. 1898: [Zjoi2005]Swamp 沼泽鳄鱼

    1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec   Memory Limit: 64 MB Submit: 984   Solved: 557 [ Submi ...

  4. bzoj1898: [Zjoi2004]Swamp 沼泽鳄鱼

    矩阵乘法 每12个单位时间是个循环 前K/12个单位时间用快速幂,后K%12个单位时间用裸矩阵乘法 #include <cstdio> #include <cstring> # ...

  5. c语言定义int 输出4386,C语言 · 矩阵乘法

    问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...

  6. [ZJOI2004]沼泽鳄鱼

    [ZJOI2004]沼泽鳄鱼 题目大意: 给定一个无向图,以及起点S和终点T.每单位时间可以从一个点走向联通的另一个点,问从起点S出发,经过K单位时间到达终点T的方案总数. 最多50个点,K小于等于1 ...

  7. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  8. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

  9. BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)

    题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...

最新文章

  1. DevOps火爆,招人却太难了!
  2. Camstasia studio渲染(生成)视频
  3. 用Red5搭建支持WEB播放的实时监控视频
  4. linux如何将json文件导入到mongo数据库
  5. JavaScript 正则表达式 学习笔记(一)
  6. Apache配置静态缓存
  7. bootstrap项目实例_精选开源SpringBoot项目:涵盖权限、搜索、秒杀、支付!
  8. 上海高考女生计算机专业,@2020高考:女生最多的15个专业,一辈子的好友就在这里...
  9. linux 线程id 进程id,在Linux上显示正在运行的进程的线程ID
  10. oracle获取表前几行,Oracle查询以获取同一表中相关行的先前值
  11. vue $refs的基本用法
  12. Asp.net WebForm使用codeFirst建立和修改数据库小结
  13. 再谈内核模块加载(二)—模块加载流程(上)
  14. vs2010中svn使用教程_VS2010中使用ankhSVN | 学步园
  15. 给出n元置换群线性表示的一种方法
  16. 在linux开发板上显示图片,制作开发板的logo标签
  17. 随笔记:实现HTML页面局部滚动及自定义滚动条样式
  18. 百度地图只显示指定的行政区域地图
  19. linux下载文件到本地
  20. python打印hello_Python第一行代码——打印hello world

热门文章

  1. NYOJ-599-奋斗的小蜗牛-2013年11月4日22:22:22
  2. 搜索引擎下拉食云速捷详细_移动端下拉框寻云速捷/-/移动端下拉框跃云速捷-...
  3. WebView中的视频全屏的相关操作
  4. 【Java基础】Java综合练习
  5. miner配置文件详解
  6. android手机只有三星采用实体键,三星新配件:你终于可以体面地使用实体全键盘了...
  7. 以 Broadcom Corporation BCM4311、BCM4312、BCM4313、BCM4321 或 BCM4322 为基础的无线网络卡...
  8. [计算机组成原理] 第六章 控制系统与CPU
  9. glusterfs删除节点步骤
  10. 安装ubantu-----服务器开发之路1