BZOJ-1898 Swamp 沼泽鳄鱼
题目链接: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 沼泽鳄鱼相关推荐
- BZOJ 1898: [Zjoi2005]Swamp 沼泽鳄鱼 [矩阵乘法]
1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1082 Solved: 602 [Submit] ...
- BZOJ 1898: [Zjoi2005]Swamp 沼泽鳄鱼
1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1085 Solved: 604 [Submit] ...
- 1898: [Zjoi2005]Swamp 沼泽鳄鱼
1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 984 Solved: 557 [ Submi ...
- bzoj1898: [Zjoi2004]Swamp 沼泽鳄鱼
矩阵乘法 每12个单位时间是个循环 前K/12个单位时间用快速幂,后K%12个单位时间用裸矩阵乘法 #include <cstdio> #include <cstring> # ...
- c语言定义int 输出4386,C语言 · 矩阵乘法
问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...
- [ZJOI2004]沼泽鳄鱼
[ZJOI2004]沼泽鳄鱼 题目大意: 给定一个无向图,以及起点S和终点T.每单位时间可以从一个点走向联通的另一个点,问从起点S出发,经过K单位时间到达终点T的方案总数. 最多50个点,K小于等于1 ...
- BZOJ.1558.[JSOI2009]等差数列(线段树 差分)
BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...
- S-T平面图中利用最短路求最小割(BZOJ 1001)
BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...
- BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)
题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...
最新文章
- DevOps火爆,招人却太难了!
- Camstasia studio渲染(生成)视频
- 用Red5搭建支持WEB播放的实时监控视频
- linux如何将json文件导入到mongo数据库
- JavaScript 正则表达式 学习笔记(一)
- Apache配置静态缓存
- bootstrap项目实例_精选开源SpringBoot项目:涵盖权限、搜索、秒杀、支付!
- 上海高考女生计算机专业,@2020高考:女生最多的15个专业,一辈子的好友就在这里...
- linux 线程id 进程id,在Linux上显示正在运行的进程的线程ID
- oracle获取表前几行,Oracle查询以获取同一表中相关行的先前值
- vue $refs的基本用法
- Asp.net WebForm使用codeFirst建立和修改数据库小结
- 再谈内核模块加载(二)—模块加载流程(上)
- vs2010中svn使用教程_VS2010中使用ankhSVN | 学步园
- 给出n元置换群线性表示的一种方法
- 在linux开发板上显示图片,制作开发板的logo标签
- 随笔记:实现HTML页面局部滚动及自定义滚动条样式
- 百度地图只显示指定的行政区域地图
- linux下载文件到本地
- python打印hello_Python第一行代码——打印hello world
热门文章
- NYOJ-599-奋斗的小蜗牛-2013年11月4日22:22:22
- 搜索引擎下拉食云速捷详细_移动端下拉框寻云速捷/-/移动端下拉框跃云速捷-...
- WebView中的视频全屏的相关操作
- 【Java基础】Java综合练习
- miner配置文件详解
- android手机只有三星采用实体键,三星新配件:你终于可以体面地使用实体全键盘了...
- 以 Broadcom Corporation BCM4311、BCM4312、BCM4313、BCM4321 或 BCM4322 为基础的无线网络卡...
- [计算机组成原理] 第六章 控制系统与CPU
- glusterfs删除节点步骤
- 安装ubantu-----服务器开发之路1