HDU5411CRB and Puzzle(矩陣快速冪)
題目連結:傳送門
題意:
一個圖有n個頂點,已知鄰接矩陣,問點可以重複用長度小於m的路徑有多少。
分析:
首先我們知道了鄰接矩陣A,那麼A^k代表的就是長度為k的路徑有多少個。那麼結果就是A^0+A^1+A^2+...+A^m。然後我們可以構造一個矩陣來幫助我們求解。
X = | A , E |
| 0 , E |
==> 然後X^m 的矩陣的右上角的矩陣代表的就是A^0+A^1+A^2+...+A^m。
當然A^0+A^1+A^2+...+A^m,也可以用二分來求。
程式碼如下:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 51*2;
const int mod = 2015;
typedef long long LL;
struct matrix{
int a[maxn][maxn];
matrix(){
memset(a,0,sizeof(a));
}
};
matrix I;
void init(){
for(int i=0;i<maxn;i++)
I.a[i][i]=1;
}
int n,m;
matrix multi(matrix A,matrix B){
matrix C;
for(int i=0;i<2*n;i++){
for(int j=0;j<2*n;j++){
for(int k=0;k<2*n;k++){
C.a[i][j]=(C.a[i][j]+A.a[i][k]*B.a[k][j]);
}
C.a[i][j]%=mod;
}
}
return C;
}
matrix add(matrix A,matrix B){
matrix C;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
C.a[i][j]=(A.a[i][j]+B.a[i][j])%mod;
}
}
return C;
}
int quick_mod(matrix A,int b){
matrix ans = I;
while(b){
if(b&1) ans = multi(ans,A);
b>>=1;
A=multi(A,A);
}
int sum = 0;
for(int i=0;i<n;i++){
for(int j=n;j<n*2;j++)
sum=sum+ans.a[i][j];
}
// cout<<"----------ans------------"<<endl;
// for(int i=0;i<2*n;i++){
// for(int j=0;j<2*n;j++)
// cout<<ans.a[i][j]<<" ";
// cout<<endl;
// }
// cout<<"----------ans------------"<<endl;
return sum%mod;
}
int main()
{
init();
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
matrix A,B;
for(int i=0;i<n;i++){
int k,u;
scanf("%d",&k);
while(k--){
scanf("%d",&u);
A.a[i][--u]=1;
}
}
for(int i=0;i<n;i++) A.a[i][i+n]=1;
for(int i=n;i<2*n;i++) A.a[i][i]=1;
// cout<<"----------A------------"<<endl;
// for(int i=0;i<2*n;i++){
// for(int j=0;j<2*n;j++)
// cout<<A.a[i][j]<<" ";
// cout<<endl;
// }
// cout<<"----------A------------"<<endl;
int sum = quick_mod(A,m);
printf("%d\n",sum+1);
}
return 0;
}
相關文章
- 矩陣快速冪矩陣
- 矩陣快速冪(快忘了)矩陣
- 矩陣快速冪總結矩陣
- 【矩陣乘法】【快速冪】遞推矩陣
- 矩陣快速冪加速最短路矩陣
- 演算法學習:矩陣快速冪/矩陣加速演算法矩陣
- HDU 1575 Tr A(矩陣快速冪)矩陣
- HDU 4565 So Easy!(矩陣快速冪)矩陣
- HDU 4686 (推公式+矩陣快速冪)公式矩陣
- POJ 3613 Cow Relays 矩陣乘法Floyd+矩陣快速冪矩陣
- P3390 【模板】矩陣快速冪矩陣
- HDU 4965 Fast Matrix Calculation(矩陣快速冪)AST矩陣
- HDU 2157 How many ways?? (矩陣快速冪)矩陣
- HDU 1005 Number Sequence(矩陣快速冪)矩陣
- HDU 2256Problem of Precision(矩陣快速冪)矩陣
- 從斐波那契到矩陣快速冪矩陣
- HDU 1575 Tr A【矩陣快速冪取模】矩陣
- HDU 1005 Number Sequence:矩陣快速冪矩陣
- HDU3221Brute-force Algorithm(矩陣快速冪&&指數降冪)Go矩陣
- bzoj3240: [Noi2013]矩陣遊戲(矩陣乘法+快速冪)矩陣遊戲
- HDU 2276 - Kiki & Little Kiki 2 (矩陣快速冪)矩陣
- BZOJ 3329 Xorequ:數位dp + 矩陣快速冪矩陣
- HDU 4291 A Short problem(矩陣快速冪+迴圈節)矩陣
- UVA 10655 Contemplation! Algebra (矩陣快速冪)矩陣
- POJ 3150 Cellular Automaton(矩陣快速冪)矩陣
- 費馬小定理 + 費馬大定理 + 勾股數的求解 + 快速冪 + 矩陣快速冪 【模板】矩陣
- 第?課——基於矩陣快速冪的遞推解法矩陣
- POJ 2778-DNA Sequence(AC自動機+構建鄰接矩陣+矩陣快速冪)矩陣
- bzoj4887: [Tjoi2017]可樂(矩陣乘法+快速冪)矩陣
- poj--2778DNA Sequence+AC自動機+矩陣快速冪矩陣
- LightOJ 1070 Algebraic Problem:矩陣快速冪 + 數學推導AI矩陣
- HDU 4549 M斐波那契數列(矩陣快速冪+費馬小定理)矩陣
- BZOJ3329: Xorequ(二進位制數位dp 矩陣快速冪)矩陣
- LightOJ 1132 Summing up Powers:矩陣快速冪 + 二項式定理矩陣
- 2015年吉林省賽 Pin Pin Pin(矩陣快速冪)矩陣
- HDU 4549M斐波那契數列(矩陣快速冪+費馬小定理)矩陣
- POJ 3233 Matrix Power Series (矩陣快速冪+等比數列二分求和)矩陣
- 斐波那契數列的第N項(1≤n≤10^18 矩陣快速冪)矩陣