可以发现,如果没有鳄鱼,那么就是裸地一道题,但是可以发现鳄鱼最多每12次重复,那么就少于12的那部分dp,其他的就矩阵乘法就行了

PS:第一次吧矩阵乘法AC了好开心QAQ

CODE:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define mod 10000
#define maxn 60
using namespace std;
struct mat{
    int n,m,a[maxn][maxn];
    mat(){n=m=0;memset(a,0,sizeof(a));}
    int I(int _x){n=m=_x;for (int i=1;i<=n;i++) a[i][i]=1;}
};
mat operator *(const mat &x,const mat &y){
    mat ans;
    ans.n=x.n;
    ans.m=y.m;
    for (int i=1;i<=ans.n;i++)
    for (int j=1;j<=ans.m;j++)
        for (int k=1;k<=x.m;k++){
        ans.a[i][j]+=x.a[i][k]*y.a[k][j];
        ans.a[i][j]%=mod;
        }
    return ans;
}
mat power(mat x,int y){
    mat ans;ans.I(x.n);
    for (;y;y>>=1){
    if (y&1) ans=ans*x;
    x=x*x;
    }
    return ans;
}
int n,m,s,e,fn,ti;
bool b[60][60];
int a[20][7],t[60],f[60][60][15];
int main(){
    scanf("%d%d%d%d%d",&n,&m,&s,&e,&ti);
    for (int i=1;i<=m;i++) {
    int x,y;
    scanf("%d%d\n",&x,&y);
    x++;y++;
    b[x][y]=b[y][x]=1;
    }
    scanf("%d",&fn);
    for (int i=1;i<=fn;i++) {
    scanf("%d",&t[i]);
    for (int j=1;j<=t[i];j++) {scanf("%d",&a[i][j]);a[i][j]++;   }
    }
    for (int i=1;i<=n;i++) f[i][i][0]=1;
    for (int i=1;i<=12;i++)
    for (int j=1;j<=n;j++)
        for (int k=1;k<=n;k++){
        for (int l=1;l<=n;l++)
            if (f[j][l][i-1]&&b[l][k]) (f[j][k][i]+=f[j][l][i-1])%=mod;    
        for (int l=1;l<=fn;l++)
            if (a[l][i%t[l]+1]==k) {f[j][k][i]=0;}
        }
    mat x,y;
    x.n=x.m=y.n=y.m=n;
    for (int i=1;i<=n;i++)
    for (int j=1;j<=n;j++)
        x.a[i][j]=f[i][j][12];
    x=power(x,ti/12);
    for (int i=1;i<=n;i++)
    for (int j=1;j<=n;j++)
        y.a[i][j]=f[i][j][ti%12];
    x=x*y;
    printf("%d",x.a[s+1][e+1]);
    return 0;
}

BZOJ 1898: [Zjoi2004]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: [Zjoi2004]Swamp 沼泽鳄鱼( dp + 矩阵快速幂 )

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

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

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

  4. 【BZOJ-1898】Swamp 沼泽鳄鱼 矩阵乘法

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

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

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

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

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

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

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

  8. BZOJ1898: [Zjoi2004]Swamp 沼泽鳄鱼

    1898: [Zjoi2004]Swamp 沼泽鳄鱼 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 478  Solved: 286[Submit][St ...

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

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

随机推荐

  1. 《C++ Primer》 chapter 15 TextQuery

    <C++ Primer>中第15章为了讲解面向对象编程,举了一个例子:设计一个小程序,能够处理查询给定word在文件中所在行的任务,并且能够处理“非”查询,“或”查询,“与”查询.例如执行 ...

  2. 2781: [JSOI2007]文本生成器

    2781: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 8  Solved: 4[Submit][Status][We ...

  3. ubuntu下Xmodmap映射Esc和Ctrl_L

    一般来说,用Vim.Emacs的人,都会有做键盘映射的想法 我当然也是,开始学习Vim的时候,就觉得,把Esc键放在左上角, 是一件很SB的事情,稍微大一点的键盘,手指必须要离开位置才能按到Esc键, ...

  4. IOS 使用GCD改善性能

    1.GCD介绍 GCD:Grand Central Dispathch,核心中央调度,是一种异步技术.但是它是系统级的. 负责管理队列,是线程之上的抽象层.队列可以并行或串行运行,能够在系统级自动管理 ...

  5. swift版 关于微信支付的那点事

    今天心情那真是想要强奸吉娃娃的冲动  说白了就是不想做和工作沾边的任何事  但是也不能闲着啊  时间那么贵 之前就想把微信支付做一下  主要就是怕自己忘记了 今天难得有时间  就来简单的记录一下  旨 ...

  6. july教你如何迅速秒杀掉:99%的海量数据处理面试题

    作者:July出处:结构之法算法之道blog 以下是原博客链接网址 http://blog.csdn.net/v_july_v/article/details/7382693 微软面试100题系列 h ...

  7. abstract、override、new、virtual、sealed使用和示例

    abstract修饰类名为抽象类,修饰方法为抽象方法.如果一个类为抽象类,则这个类智能是其他某个类的基类.抽象方法在抽象类中没有函数体.抽象类中的抽象方法是没有方法体的,继承其的子类必须实现抽象类的抽 ...

  8. ExtJS与后台Java交互

    参考博客:http://blog.csdn.net/wanghuan203/article/details/8125970 开发环境:Eclipse + Tomcat + ExtJS6.0 工程目录结 ...

  9. Js中Array数组学习总结

    第一次写博客...有点方... 小白一枚(是真的小白),自学前端,下面来说说我在学习过程中总结的一些数组操作,如果说哪有错误,请各位大神多多指出,小的虚心接受. 引用类型分为Object类型(所谓的对 ...

  10. KB奇遇记(9):艰难的上线

    经历了非常多的磨难,系统也“如约“在2017年01月01日勉强上线了.尽管我认为它还不到上线的程度,条件不具备,但上头的指令下来和计划便是在这一天.整个上线过程从2016年3月8号开始到上线日,扣除中 ...