根据离散数学:一个由0,1构成的矩阵A,任意常数k,A^k次表示矩阵中任意点经过k条路径到任意点的的方法数,点可以重复走。
这是一个很重要的图论知识,POJ2888就有运用到。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int u,v;
const int mod=9973;
struct Matrix{
int Mat[15][15];
};
Matrix operator * (Matrix a,Matrix b)
{
Matrix c;
for(int i=0;i<6;i++)
{
for(int j=0;j<6;j++)
{
c.Mat[i][j]=0;
for(int k=0;k<6;k++)
{
c.Mat[i][j]=(c.Mat[i][j]+a.Mat[i][k]*b.Mat[k][j])%mod;
}
}
}
return c;
}
Matrix operator ^ (Matrix a,int b)
{
Matrix temp;
Matrix base=a;
memset(temp.Mat,0,sizeof(temp.Mat));
for(int i=0;i<6;i++) temp.Mat[i][i]=1;
while(b)
{
if(b&1) temp=temp*base;
base=base*base;
b>&g