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


  1. #include<iostream>
  2. #include<cstdio>
  3. #define M 10000
  4. #define RI register int
  5. using namespace std;
  6. int i,m,n,j,k,z,t[21],x,y,p[21][5],s,e,b[51][51];
  7. struct vv
  8. {
  9. int w[51][51];
  10. } d[21],f,g[21],u;
  11. inline vv cheng(vv a,vv b,int n,int m,int k)
  12. {
  13. vv e;
  14. for(RI i=1;i<=n;++i)
  15. for(RI j=1;j<=m;++j)
  16. {
  17. e.w[i][j]=0;
  18. for(RI l=1;l<=k;++l) e.w[i][j]=e.w[i][j]+a.w[i][l]*b.w[l][j];
  19. if(e.w[i][j]>10000) e.w[i][j]%=M;
  20. }
  21. return e;
  22. }
  23. inline vv ksm(int k,vv a)
  24. {
  25. for(RI i=1;i<=n;++i) u.w[i][i]=1;
  26. if(k==0) return u;
  27. for(RI i=k;i>1;i>>=1)
  28. {
  29. if(i&1) u=cheng(u,a,n,n,n);
  30. a=cheng(a,a,n,n,n);
  31. }
  32. return cheng(a,u,n,n,n);
  33. }
  34. int main()
  35. {
  36. scanf("%d%d%d%d%d",&n,&m,&s,&e,&k);
  37. s+=1; e+=1;
  38. for(RI i=1;i<=m;++i)
  39. {
  40. scanf("%d%d",&x,&y);
  41. b[x+1][y+1]=b[y+1][x+1]=1;
  42. }
  43. scanf("%d",&z);
  44. for(RI i=1;i<=z;++i)
  45. {
  46. scanf("%d",&t[i]);
  47. for(RI j=1;j<=t[i];++j) scanf("%d",&p[i][j]);
  48. }
  49. for(RI i=1;i<=12;++i)
  50. {
  51. for(RI j=1;j<=n;++j) for(RI l=1;l<=n;++l) if(b[j][l]) d[i].w[j][l]=1;
  52. for(RI j=1;j<=z;++j)
  53. {
  54. int s=i%t[j]+1;
  55. for(RI l=1;l<=n;++l) d[i].w[l][p[j][s]+1]=0;
  56. }
  57. }
  58. for(RI i=1;i<=n;++i) g[0].w[i][i]=1;
  59. for(RI i=1;i<=12;++i)
  60. g[i]=cheng(g[i-1],d[i],n,n,n);
  61. int q=k/12;
  62. f.w[1][s]=1;
  63. vv y=ksm(q,g[12]);
  64. y=cheng(y,g[k-q*12],n,n,n);
  65. f=cheng(f,y,1,n,n);
  66. printf("%d",f.w[1][e]%M);
  67. }

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. [PHP] 重回基础(Array相关函数)

    使用函数array_keys(),得到数组中所有的键,参数:数组 $arr=array(); $arr['one']="one"; $arr['two']="two&qu ...

  2. MyEclipse中新建JSP页面编码设置(UTF-8)

    今天再次遭遇反人类的Eclipse,新建JSP页面编码竟然是不是UTF8,导致各种乱码.做下面的修改就能避免这个问题了.

  3. [WPF]记一个Win8"缩放级别"设置导致的问题

    这是我电脑的分辨率设置: 关键在于设置了缩放级别"较大",即150%的缩放. 接下来在WinForm中用各种方法取得的屏幕分辨率都是缩放之后的,但是这个时候的鼠标事件中鼠标位置也是 ...

  4. 解决:jsp 页面不全,response 内容不完整

    前言:今天 jsp 页面输出不完整这个问题困扰了我几个小时,终于发现问题并解决了. 环境: tomcat 8.0.17 x64 jsp springmvc vue 问题: 本来页面正常,但加了几行代码 ...

  5. Windows上只复制目录结构不复制文件

    xcopy /T /E D:\filetest\FB\BK\bs\ D:\filetest\asdf

  6. 记录在window平台安装python的第三库(py,whl)

    在下载python的第三库文件的时候,有些库文件有exe的发行版,但是有些第三库并没有找到针对于window的可执行文件安装包即exe文件,而只有源代码文件即py文件,和whl文件. 下面记录一下在w ...

  7. Strut2开发经验总结

    1.如何在html静态页面中使用struts tomcat目录/conf/web.xml 文件中,找到 <servlet-mapping> <servlet-name>jsp& ...

  8. nvflash 报错解决

    0.首先给出nvflash官网下载地址: https://www.techpowerup.com/download/nvidia-nvflash/ 刷入命令 nvflash xxx.rom 多显卡刷入 ...

  9. asp.net mvc +easyui 实现权限管理(二)

    一写完后,好久没有继续写了.最近公司又在重新开发权限系统了,但是由于我人微言轻,无法阻止他们设计一个太监版的权限系统.想想确实是官大一级压死人啊, 没办法我只好不参与了 让他们去折腾. 我就大概说一下 ...

  10. windows域渗透实战

    测试环境 域控: 192.168.211.130 已经控制的机器: 192.168.211.133 获取网络信息 查看机器的网络信息 ipconfig /all # 查看 网卡信息,获取dns 服务器 ...