zoukankan      html  css  js  c++  java
  • HDU 2157 How many ways??

    矩阵快速幂。

    先构造邻接矩阵,这个矩阵的K次方,就表示从从i到j有几种走法。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    int n,m;
    const int maxn=20;
    const int MOD=1000;
    struct Matrix
    {
        int A[25][25];
        Matrix operator*(Matrix b);
    };
    
    Matrix Matrix::operator*(Matrix b)
    {
        Matrix c;
        memset(c.A,0,sizeof(c.A));
        int i,j,k;
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
                for(k=1; k<=n; k++)
                    c.A[i][j]=(c.A[i][j]+(A[i][k]*b.A[k][j])%MOD)%MOD;
        return c;
    }
    
    int main()
    {
        int i,j;
        while(~scanf("%d%d",&n,&m))
        {
            if(n==0&&m==0) break;
            Matrix JZ;
            Matrix CS;
            memset(JZ.A,0,sizeof(JZ.A));
            memset(CS.A,0,sizeof(CS.A));
            for(i=0; i<m; i++)
            {
                int u,v;
                scanf("%d%d",&u,&v);
                u++;
                v++;
                CS.A[u][v]=1;
            }
    
            int T;
            scanf("%d",&T);
    
            while(T--)
            {
                int s,t,k;
                Matrix c;
                scanf("%d%d%d",&s,&t,&k);
                s++;
                t++;
                for(i=1; i<=n; i++)
                    for(j=1; j<=n; j++)
                        JZ.A[i][j]=CS.A[i][j];
                for(i=1; i<=n; i++)
                    for(j=1; j<=n; j++)
                    {
                        if(i==j) c.A[i][j]=1;
                        else c.A[i][j]=0;
                    }
                while(k>0)
                {
                    if(k%2==1) c=c*JZ,k--;
                    else JZ=JZ*JZ,k=k/2;
                }
                printf("%d
    ",c.A[s][t]);
            }
        }
        return 0;
    }
  • 相关阅读:
    STM32 端口复用配置
    stm32 新建文件记得添加到工程
    keil解决SYSTEMsysstm32f10x.h(298): error: #67: expected a "}"
    解决Keil复制中文乱码
    STM32 MPU6050 源码
    STM32 PWM输出
    STM32定时器
    STM32 看门狗操作姿势
    开课博客
    第二周学习进度
  • 原文地址:https://www.cnblogs.com/zufezzt/p/4665315.html
Copyright © 2011-2022 走看看