HDU 2157 How many ways?? (矩陣快速冪)
How many ways??
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3429 Accepted Submission(s): 1316
Problem Description
春天到了, HDU校園裡開滿了花, 奼紫嫣紅, 非常美麗. 蔥頭是個愛花的人, 看著校花校草競相開放, 漫步校園, 心情也變得舒暢. 為了多看看這迷人的校園, 蔥頭決定, 每次上課都走不同的路線去教室, 但是由於時間問題, 每次只能經過k個地方, 比方說, 這次蔥頭決定經過2個地方, 那他可以先去問鼎廣場看看噴泉, 再去教室, 也可以先到體育場跑幾圈, 再到教室. 他非常想知道, 從A 點恰好經過k個點到達B點的方案數, 當然這個數有可能非常大, 所以你只要輸出它模上1000的餘數就可以了. 你能幫幫他麼??
你可決定了蔥頭一天能看多少校花哦
Input
輸入資料有多組, 每組的第一行是2個整數 n, m(0 < n <= 20, m <= 100) 表示校園內共有n個點, 為了方便起見, 點從0到n-1編號,接著有m行, 每行有兩個整數 s, t (0<=s,t<n) 表示從s點能到t點, 注意圖是有向的.接著的一行是兩個整數T,表示有T組詢問(1<=T<=100),
接下來的T行, 每行有三個整數 A, B, k, 表示問你從A 點到 B點恰好經過k個點的方案數 (k < 20), 可以走重複邊。如果不存在這樣的走法, 則輸出0
當n, m都為0的時候輸入結束
接下來的T行, 每行有三個整數 A, B, k, 表示問你從A 點到 B點恰好經過k個點的方案數 (k < 20), 可以走重複邊。如果不存在這樣的走法, 則輸出0
當n, m都為0的時候輸入結束
Output
計算每次詢問的方案數, 由於走法很多, 輸出其對1000取模的結果
Sample Input
4 4
0 1
0 2
1 3
2 3
2
0 3 2
0 3 3
3 6
0 1
1 0
0 2
2 0
1 2
2 1
2
1 2 1
0 1 3
0 0
Sample Output
2
0
1
3
Author
小黑
Source
圖的鄰接矩陣進行平方運算的含義:
A^n中,A[i][j]表示的是從i出發走到點j走n步,有多少種走法。
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stack>
#include <algorithm>
#include <math.h>
using namespace std;
#define ll long long
const int N = 22;
const int p = 1000;
int n,m;
struct mx
{
int c[N][N];
};
mx chen(mx a,mx b)
{
mx ans;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
ans.c[i][j]=0;
for(int k=1;k<=n;k++)
{
(ans.c[i][j]+=a.c[i][k]*b.c[k][j])%=p;
}
}
}
return ans;
}
mx mxqkm(mx base,int mi)
{
mx ans;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
ans.c[i][j]=i==j;
}
}
while(mi)
{
if(mi&1)
{
ans=chen(ans,base);
}
mi>>=1;
base=chen(base,base);
}
return ans;
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
if(!(n+m)) break;
mx a;
memset(a.c,0,sizeof a.c);
while(m--)
{
int u,v;
scanf("%d %d",&u,&v);
a.c[u+1][v+1]=1;
}
int T;
scanf("%d",&T);
while(T--)
{
int i,j;
int k;
scanf("%d %d %d",&i,&j,&k);
mx ans=mxqkm(a,k);
printf("%d\n",ans.c[i+1][j+1]);
}
}
}
相關文章
- HDU 2157 How many ways??:矩陣快速冪【i到j共經過k個節點的方法數】矩陣
- HDU 1575 Tr A(矩陣快速冪)矩陣
- HDU 4565 So Easy!(矩陣快速冪)矩陣
- HDU 4686 (推公式+矩陣快速冪)公式矩陣
- 動態規劃 hdu 1978 How many ways動態規劃
- HDU 4965 Fast Matrix Calculation(矩陣快速冪)AST矩陣
- HDU 1005 Number Sequence(矩陣快速冪)矩陣
- HDU 2256Problem of Precision(矩陣快速冪)矩陣
- HDU 1575 Tr A【矩陣快速冪取模】矩陣
- HDU 1005 Number Sequence:矩陣快速冪矩陣
- HDU5411CRB and Puzzle(矩陣快速冪)矩陣
- 矩陣快速冪矩陣
- HDU 2276 - Kiki & Little Kiki 2 (矩陣快速冪)矩陣
- HDU 4291 A Short problem(矩陣快速冪+迴圈節)矩陣
- HDU3221Brute-force Algorithm(矩陣快速冪&&指數降冪)Go矩陣
- 矩陣快速冪(快忘了)矩陣
- 矩陣快速冪總結矩陣
- 【矩陣乘法】【快速冪】遞推矩陣
- HDU 4549 M斐波那契數列(矩陣快速冪+費馬小定理)矩陣
- POJ 3613 Cow Relays 矩陣乘法Floyd+矩陣快速冪矩陣
- HDU 4549M斐波那契數列(矩陣快速冪+費馬小定理)矩陣
- P3390 【模板】矩陣快速冪矩陣
- 從斐波那契到矩陣快速冪矩陣
- bzoj3240: [Noi2013]矩陣遊戲(矩陣乘法+快速冪)矩陣遊戲
- BZOJ 3329 Xorequ:數位dp + 矩陣快速冪矩陣
- UVA 10655 Contemplation! Algebra (矩陣快速冪)矩陣
- POJ 3150 Cellular Automaton(矩陣快速冪)矩陣
- HDU 1213 How Many Tables(並查集)並查集
- 費馬小定理 + 費馬大定理 + 勾股數的求解 + 快速冪 + 矩陣快速冪 【模板】矩陣
- POJ 2778-DNA Sequence(AC自動機+構建鄰接矩陣+矩陣快速冪)矩陣
- 2014多校聯合第9場1006||hdu 4965 矩陣乘法和快速冪矩陣
- hdu 1757 矩陣連乘矩陣
- bzoj4887: [Tjoi2017]可樂(矩陣乘法+快速冪)矩陣
- HDU 3038 How Many Answers Are Wrong (帶權並查集)並查集
- 【構造共軛函式+矩陣快速冪】HDU 4565 So Easy! (2013 長沙賽區邀請賽)函式矩陣
- poj--2778DNA Sequence+AC自動機+矩陣快速冪矩陣
- LightOJ 1070 Algebraic Problem:矩陣快速冪 + 數學推導AI矩陣
- HDU4565 So Easy! (矩陣)矩陣