美文网首页
矩阵快速幂的模板

矩阵快速幂的模板

作者: 陌路晨曦 | 来源:发表于2017-07-14 09:09 被阅读0次
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<string.h>
#define LL long long 
#define mod 1000
using namespace std;
struct mat
{
    int m[105][105];
}unit;

int n,m;
void init_unit()
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(i==j)
            {
                unit.m[i][j] = 1;
            }
        }
    }
 } 
 
mat operator * (mat a, mat b)
{
    mat ret;
    LL x;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            x = 0;
            for(int k=0;k<n;k++)
            {
                x += ((LL)a.m[i][k] * b.m[k][j])%mod;
                ret.m[i][j] = x%mod;
            }
        }
    }
    return ret;
}
mat pow_mat(mat a, LL x)
{
    mat ret = unit;
    while(x)
    {
        if(x & 1) ret = ret*a;
        a = a*a;
        x >>= 1;
    }
    return ret;
}
void print(mat tmp)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            printf("%d  ",tmp.m[i][j]);
        }
        printf("\n");
    }
}
int main()
{
    
    while(~scanf("%d%d",&n,&m))
    {
        if(n==0&m==0) break;
        init_unit();
        mat am;
        memset(am.m,0,sizeof(am.m));
        for(int i=0;i<m;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            am.m[a][b] = 1;
        }
        //print(am);
        int t;
        scanf("%d",&t);
        for(int i=0;i<t;i++)
        {
            int a,b,k;
            scanf("%d%d%d",&a,&b,&k);
            mat tmp = pow_mat(am,k);
            //print(tmp);
            printf("%d\n",tmp.m[a][b]);
        }
    }
}

相关文章

  • 模板 | 矩阵快速幂

    基础知识储备 1. 矩阵的定义: 2. N阶方阵: 行数与列数相同(均为n)的矩阵,叫做n阶方阵。如下图所示就是一...

  • (矩阵)快速幂

    快速乘法: 快速幂: 矩阵快速幂:

  • 矩阵快速幂的模板

  • 快速幂,矩阵快速幂

    快速幂:复杂度为logn,比普通的n快了很多了. 原理 : 实现代码如下:(位运算,简单,简洁) 矩阵快速幂: 所...

  • 2018-07-09-快速幂

    参考:算法学习 - 快速幂和矩阵快速幂(复杂度Olog(n))C++实现 - CSDN博客

  • 矩阵快速幂

    zoj 3497 Mistwald矩阵乘法,但是要先把点从二维变成一维,然后要特殊处理一下终点情况,走到终点就不...

  • 2018-10-07-HDOJ-5950

    题目:HDOJ-5950一道矩阵快速幂经典题。

  • Codeforces Round #420 (Div. 2) E

    这个题很劲的,先贴代码,具体想法过程,一会再来写用矩阵快速幂去实现了一个寻找最优解的过程矩阵快速幂和dp的原理其实...

  • 快速幂模板

    递归算法 非递归算法

  • 矩阵快速幂——实战

    垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。经过长期观察,at...

网友评论

      本文标题:矩阵快速幂的模板

      本文链接:https://www.haomeiwen.com/subject/rrlnhxtx.html