bzoj1898: [Zjoi2005]Swamp 沼泽鳄鱼
来源:互联网 发布:淘宝 跑腿 编辑:程序博客网 时间:2024/06/10 10:51
传送门
首先我们发现lcm(2,3,4)=12很小
于是我们预处理出12个时刻内所有合法转移
然后我们大力矩阵乘法就可以了。
#include<cstring>#include<cmath> #include<cstdio> #include<iostream> #include<cstdlib> #include<algorithm>#define ll long long#define N 50005using namespace std;struct edge{int x,y,z;}e[3005];int n,m,s,t,k,p,fish[25][10];struct matrix{ int a[55][55]; void clear(){memset(a,0,sizeof(a));} matrix operator * (const matrix b) const { matrix c; c.clear(); for (int i=0;i<n;i++) for (int j=0;j<n;j++) for (int k=0;k<n;k++) c.a[i][j]=(a[i][k]*b.a[k][j]+c.a[i][j])%10000; return c; } void build(int tim){ clear(); int ok[55]; memset(ok,1,sizeof(ok)); for (int i=1;i<=p;i++) ok[fish[i][tim%fish[i][4]]]=0; for (int i=1;i<=m;i++){ if (ok[e[i].x]) a[e[i].y][e[i].x]=1; if (ok[e[i].y]) a[e[i].x][e[i].y]=1; } } matrix pow(int x){ matrix c,d; c.clear(); memcpy(d.a,a,sizeof(a)); for (int i=0;i<n;i++) c.a[i][i]=1; while (x){ if (x%2) c=c*d; d=d*d; x/=2; } return c; }}ans,ppp[15]; int main(){ scanf("%d%d%d%d%d",&n,&m,&s,&t,&k); for (int i=1;i<=m;i++) scanf("%d%d",&e[i].x,&e[i].y); scanf("%d",&p); for (int i=1;i<=p;i++){ scanf("%d",&fish[i][4]); for (int j=0;j<fish[i][4];j++) scanf("%d",&fish[i][j]); } for (int i=1;i<=12;i++) ppp[i].build(i); for (int i=0;i<n;i++) ppp[0].a[i][i]=1; for (int i=1;i<=12;i++) ppp[i]=ppp[i-1]*ppp[i]; ans=ppp[12].pow(k/12)*ppp[k%12]; printf("%d",ans.a[s][t]);}
阅读全文
0 0
- BZOJ1898: [Zjoi2005]Swamp 沼泽鳄鱼
- bzoj1898: [Zjoi2005]Swamp 沼泽鳄鱼
- bzoj1898: [Zjoi2005]Swamp 沼泽鳄鱼
- 【BZOJ1898】[Zjoi2005]Swamp 沼泽鳄鱼【DP】【矩阵乘法】
- [BZOJ1898][Zjoi2005]Swamp 沼泽鳄鱼(dp+矩阵优化)
- 矩阵——bzoj1898: [Zjoi2005]Swamp 沼泽鳄鱼
- [JZOJ2288] [BZOJ1898]【ZJOI2005】沼泽鳄鱼
- bzoj1898: [Zjoi2004]Swamp 沼泽鳄鱼
- 1898: [Zjoi2005]Swamp 沼泽鳄鱼
- [BZOJ1898][ZJOI2005]沼泽鳄鱼(矩阵乘法)
- [BZOJ1898] Swamp 沼泽鳄鱼 && 矩阵快速幂
- 【BZOJ1898】【Zjoi2004】Swamp 沼泽鳄鱼 矩阵乘法
- BZOJ 1898: [Zjoi2005]Swamp 沼泽鳄鱼
- bzoj 1898: [Zjoi2005]Swamp 沼泽鳄鱼
- 【bzoj1898】[Zjoi2004]Swamp 沼泽鳄鱼 矩阵乘法+DP
- bzoj 1898 [Zjoi2005]Swamp 沼泽鳄鱼 矩阵乘法
- SSL2512&BZOJ1898 沼泽鳄鱼
- 【ZJOI2005】沼泽鳄鱼
- eclipse常用快捷键和一些问题总结
- String 比较中 equals()和equalsIgnoreCase()的区别
- python_笔记day1
- caffe 命令行解析
- IDEA社区版使用Maven + Tomcat开发Web项目
- bzoj1898: [Zjoi2005]Swamp 沼泽鳄鱼
- 标题
- 欧拉函数 HDU 1286 HDU 2588 HDU 2824 HDU 4983
- 安卓之自定义UI(画布Canvas)
- 一位资深程序员大牛给予Java初学者的学习路线建议
- 浮躁了,我需要静静!
- Oracle 常用命令
- Java 8 新特性——学习总结
- Spring Batch 精萃