zoukankan      html  css  js  c++  java
  • P2579 [ZJOI2005]沼泽鳄鱼(矩乘)

    P2579 [ZJOI2005]沼泽鳄鱼

    没有食人鱼:直接矩乘优化

    有食人鱼:食人鱼周期2、3、4,公倍数12,可以以12为一个周期矩乘,剩下的暴力

    注意矩乘不满足乘法交换律,一定要注意乘的顺序

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,m,S,T,K,d[7];
    struct mat{
        int a[52][52];
        mat(){memset(a,0,sizeof(a));}
        mat operator * (const mat &G) const{
            mat c;
            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]=(c.a[i][j]+a[i][k]*G.a[k][j]%10000)%10000;
            return c;
        }
    }s,f[14],w;
    mat Pow(mat x,int y){
        mat re;
        for(int i=0;i<n;++i) re.a[i][i]=1;
        for(;y;y>>=1,x=x*x) if(y&1) re=re*x;
        return re;
    }
    int main(){
        scanf("%d%d%d%d%d",&n,&m,&S,&T,&K);
        for(int i=1,u,v;i<=m;++i){
            scanf("%d%d",&u,&v);
            s.a[u][v]=s.a[v][u]=1;
        }
        for(int i=0;i<12;++i) f[i]=s;
        scanf("%d",&m);
        for(int i=1,t;i<=m;++i){
            scanf("%d",&t);
            for(int u=0;u<t;++u) scanf("%d",&d[u]);
            for(int j=0;j<12;++j)
                for(int k=0;k<n;++k)
                    f[j].a[k][d[j%t]]=0;
        }
        for(int i=0;i<n;++i) w.a[i][i]=1;
        for(int i=1;i<12;++i) w=w*f[i];
        w=w*f[0]; w=Pow(w,K/12);
        for(int i=1;i<=K%12;++i) w=w*f[i];
        printf("%d",w.a[S][T]);
        return 0;
    }
  • 相关阅读:
    事务的基本特性和隔离级别
    mysql锁的类型
    索引设计的原则
    mysql聚簇索引和非聚簇索引的区别
    spring事务什么时候会失效?
    spring事务传播机制
    GAN的Pytorch实现
    DCGAN的Pytorch实现
    PyTorch学习教程、手册
    去噪论文合集Paper
  • 原文地址:https://www.cnblogs.com/kafuuchino/p/11349306.html
Copyright © 2011-2022 走看看