1898: [Zjoi2005]Swamp 沼泽鳄鱼

Time Limit: 5 Sec Memory Limit: 64 MB

Submit: 1582 Solved: 870

[Submit][Status][Discuss]

Description

潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区。每当雨季来临,这里碧波荡漾、生机盎然,引来不少游客。为了让游玩更有情趣,人们在池塘的中央建设了几座石墩和石桥,每座石桥连接着两座石墩,且每两座石墩之间至多只有一座石桥。这个景点造好之后一直没敢对外开放,原因是池塘里有不少危险的食人鱼。豆豆先生酷爱冒险,他一听说这个消息,立马赶到了池塘,想做第一个在桥上旅游的人。虽说豆豆爱冒险,但也不敢拿自己的性命开玩笑,于是他开始了仔细的实地勘察,并得到了一些惊人的结论:食人鱼的行进路线有周期性,这个周期只可能是2,3或者4个单位时间。每个单位时间里,食人鱼可以从一个石墩游到另一个石墩。每到一个石墩,如果上面有人它就会实施攻击,否则继续它的周期运动。如果没有到石墩,它是不会攻击人的。借助先进的仪器,豆豆很快就摸清了所有食人鱼的运动规律,他要开始设计自己的行动路线了。每个单位时间里,他只可以沿着石桥从一个石墩走到另一个石墩,而不可以停在某座石墩上不动,因为站着不动还会有其它危险。如果豆豆和某条食人鱼在同一时刻到达了某座石墩,就会遭到食人鱼的袭击,他当然不希望发生这样的事情。现在豆豆已经选好了两座石墩Start和End,他想从Start出发,经过K个单位时间后恰好站在石墩End上。假设石墩可以重复经过(包括Start和End),他想请你帮忙算算,这样的路线共有多少种(当然不能遭到食人鱼的攻击)。

Input

输入文件共M + 2 + NFish行。第一行包含五个正整数N,M,Start,End和K,分别表示石墩数目、石桥数目、Start石墩和End石墩的编号和一条路线所需的单位时间。石墩用0到N–1的整数编号。第2到M + 1行,给出石桥的相关信息。每行两个整数x和y,0 ≤ x, y ≤ N–1,表示这座石桥连接着编号为x和y的两座石墩。第M + 2行是一个整数NFish,表示食人鱼的数目。第M + 3到M + 2 + NFish行,每行给出一条食人鱼的相关信息。每行的第一个整数是T,T = 2,3或4,表示食人鱼的运动周期。接下来有T个数,表示一个周期内食人鱼的行进路线。 如果T=2,接下来有2个数P0和P1,食人鱼从P0到P1,从P1到P0,……; 如果T=3,接下来有3个数P0,P1和P2,食人鱼从P0到P1,从P1到P2,从P2到P0,……; 如果T=4,接下来有4个数P0,P1,P2和P3,食人鱼从P0到P1,从P1到P2,从P2到P3,从P3到P0,……。豆豆出发的时候所有食人鱼都在自己路线上的P0位置,请放心,这个位置不会是Start石墩。

Output

输出路线的种数,因为这个数可能很大,你只要输出该数除以10000的余数就行了。 【约定】 1 ≤ N ≤ 50  1 ≤ K ≤ 2,000,000,000  1 ≤ NFish ≤ 20

Sample Input

6 8 1 5 3

0 2

2 1

1 0

0 5

5 1

1 4

4 3

3 5

1

3 0 5 1

Sample Output

2

【样例说明】

时刻 0 1 2 3

食人鱼位置 0 5 1 0

路线一 1 2 0 5

路线二 1 4 3 5


观察周期为234,不妨建12个矩阵相乘维护前缀和,然后用快速幂求乘积的k/12次方。最后在乘k%12的前缀积。

下标是从0开始的QAQ

时间也是从0开始的QAQ QAQ


#include<iostream>
#include<cstdio>
#define M 10000
#define RI register int using namespace std; int i,m,n,j,k,z,t[21],x,y,p[21][5],s,e,b[51][51]; struct vv
{
int w[51][51];
} d[21],f,g[21],u; inline vv cheng(vv a,vv b,int n,int m,int k)
{
vv e;
for(RI i=1;i<=n;++i)
for(RI j=1;j<=m;++j)
{
e.w[i][j]=0;
for(RI l=1;l<=k;++l) e.w[i][j]=e.w[i][j]+a.w[i][l]*b.w[l][j];
if(e.w[i][j]>10000) e.w[i][j]%=M;
}
return e;
} inline vv ksm(int k,vv a)
{
for(RI i=1;i<=n;++i) u.w[i][i]=1;
if(k==0) return u;
for(RI i=k;i>1;i>>=1)
{
if(i&1) u=cheng(u,a,n,n,n);
a=cheng(a,a,n,n,n);
}
return cheng(a,u,n,n,n);
} int main()
{
scanf("%d%d%d%d%d",&n,&m,&s,&e,&k);
s+=1; e+=1;
for(RI i=1;i<=m;++i)
{
scanf("%d%d",&x,&y);
b[x+1][y+1]=b[y+1][x+1]=1;
}
scanf("%d",&z);
for(RI i=1;i<=z;++i)
{
scanf("%d",&t[i]);
for(RI j=1;j<=t[i];++j) scanf("%d",&p[i][j]);
}
for(RI i=1;i<=12;++i)
{
for(RI j=1;j<=n;++j) for(RI l=1;l<=n;++l) if(b[j][l]) d[i].w[j][l]=1;
for(RI j=1;j<=z;++j)
{
int s=i%t[j]+1;
for(RI l=1;l<=n;++l) d[i].w[l][p[j][s]+1]=0;
}
}
for(RI i=1;i<=n;++i) g[0].w[i][i]=1;
for(RI i=1;i<=12;++i)
g[i]=cheng(g[i-1],d[i],n,n,n);
int q=k/12; f.w[1][s]=1;
vv y=ksm(q,g[12]);
y=cheng(y,g[k-q*12],n,n,n);
f=cheng(f,y,1,n,n);
printf("%d",f.w[1][e]%M);
}

BZOJ卡常到飞起差评_(:з」∠)_

1898: [Zjoi2005]Swamp 沼泽鳄鱼的更多相关文章

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

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

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

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

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

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

  4. bzoj 1898: [Zjoi2005]Swamp 沼泽鳄鱼【dp+矩阵快速幂】

    注意到周期234的lcm只有12,也就是以12为周期,可以走的状态是一样的 所以先预处理出这12个状态的转移矩阵,乘起来,然后矩阵快速幂优化转移k/12次,然后剩下的次数暴力转移即可 #include ...

  5. BZOJ1898: [Zjoi2005]Swamp 沼泽鳄鱼(矩阵乘法)

    1898: [Zjoi2005]Swamp 沼泽鳄鱼 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 Description 潘塔 ...

  6. BZOJ 1898: [Zjoi2004]Swamp 沼泽鳄鱼( dp + 矩阵快速幂 )

    ----------------------------------------------------------------------- #include<cstdio> #incl ...

  7. 【BZOJ1898】[Zjoi2005]Swamp 沼泽鳄鱼 矩阵乘法

    [BZOJ1898][Zjoi2005]Swamp 沼泽鳄鱼 Description 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎 ...

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

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

  9. bzoj1898: [Zjoi2005]Swamp 沼泽鳄鱼

    一眼矩乘 把图分成12个,然后直接搞. #include<cstdio> #include<iostream> #include<cstring> #include ...

随机推荐

  1. 进程间通信IPC -- 管道, 队列

    进程间通信--IPC(Inter-Process Communication) 管道 from multiprocessing import Pipecon1,con2 = Pipe()管道是不安全的 ...

  2. 解决win7无法打开chm格式文件的问题

    解决win7无法打开chm格式文件的问题. (一).简单方法(本人用的这个) 1.打开chm2.win7提示安全问题3.chm无法显示内容4.关闭chm5.右键点击chm,点击“解除锁定”,ok  没 ...

  3. 14:求10000以内n的阶乘

    14:求10000以内n的阶乘 查看 提交 统计 提问 总时间限制:  5000ms 内存限制:  655360kB 描述 求10000以内n的阶乘. 输入 只有一行输入,整数n(0<=n< ...

  4. [微信小程序]微信开发工具出现 1not found 编译 .wxss文件信息错误怎么办?

    错误代码: "1not found 编译 .wxss文件信息错误",如 下图 出现场景: 1.一般出现在安装新版本之后出现的状况,可能由于版本之间的兼容导致 解决办法: 1.重装整 ...

  5. iframe的探讨

    用法 1.iframe是用来在网页中插入第三方页面,早期的页面使用iframe主要是用于导航栏这种很多页面都相同的部分,这样在切换页面的时候避免重复下载. 优点 1.便于修改,模拟分离,像一些信息管理 ...

  6. opencv3.2.0 分离颜色通道&多通道图像混合

    ##名称:分离颜色通道&多通道图像混合 ##平台:QT5.7.1+OpenCV3.2.0 ##时间:2017年12月11日 /***************创建QT控制台程序********* ...

  7. AJAX跨域访问(从Tomcat8到Apache/Nginx/Spring Boot)

    1.在Tomcat的Root目录下放入如下的文件 apache-tomcat-8.0.12X64\webapps\ROOT clientaccesspolicy.xml文件 <?xml vers ...

  8. 使用MaxCompute访问TableStore(OTS) 简明手册

    摘要: 大数据计算服务 MaxCompute 能够提供强大的分析能力,而分布式 NoSQL 数据库表格存储在行级别上的实时更新和可覆盖性写入等特性,相对于 MaxCompute 内置表 append- ...

  9. Pwn with File结构体(三)

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 前面介绍了几种 File 结构体的攻击方式,其中包括修改 vtab ...

  10. SqlSugarClientHelper

    using SqlSugar; using System; using System.Collections.Generic; using System.Configuration; using Sy ...