hdu 2157 K步路 矩陣快速冪

2021-06-14 04:33:21 字數 756 閱讀 9399

題目大意: 給出有向連通圖,求a到b恰好經過k個點的方案數%m

解題思路: 鄰接矩陣0-1儲存邊edge[ ][ ]

鄰接矩陣相乘,edge[i][k]*edge[k][j]當且僅當edge[i][k]和edge[k][j]同時為1,也就是同時存在這兩條邊時相乘才為1

定義g[i][j]m表示i到j恰好經過m條邊的方案數,則方程: 

g[i][j]m=

σg[i][k]

m-1*

edge[k][j]

(1<=k<=n) 

利用二進位制的思想把m次計算簡化成log m次運算

**:

#include #include #include #define inf 0x3f3f3f3f

#define max 110

typedef struct nodematrix;

matrix map,map2,ant,temp;

int n,mm=1000;

matrix matrix(matrix &a,matrix &b)

return ant.edge[s][e];

}int main()

{ int i,j,m,t,a1,a2,s,e,k;

while(scanf("%d%d",&n,&m)!=eof)

{ if(n==0&&m==0)

return 0;

memset(map.edge,0,sizeof(map.edge));

for(i=0;i

hdu 2157 (矩陣快速冪)

題目 把給定的圖轉為鄰接矩陣,即a i,j 1當且僅當存在一條邊i j。令c a a,那麼c i,j a i,k a k,j 實際上就等於從點i到點j恰好經過2條邊的路徑數 列舉k為中轉點 類似地,c a的第i行第j列就表示從i到j經過3條邊的路徑數。通過將矩陣連乘的過程模擬出來,模擬一遍就懂了。i...

hdu 4965 矩陣快速冪

給定兩個矩陣a,b,分別為n k和k n 求出矩陣c a b,矩陣m c n n 將矩陣m中的所有元素取模6,得到新矩陣m 並計算矩陣m 中所有元素的和 注意到ba 得到 6 6,而ab 得到1000 1000 轉化乘法算式為 m abababab.a ba n n 1 b 直接用矩陣快速冪即可 i...

快速矩陣冪HDU2276

題意 有n盞燈,編號為1到n。0表示不亮,1表示亮,如果 i th的燈的左邊燈是亮的,那麼下一秒鐘,i th燈的狀態要改變,0變成1,1變成0。第1個燈的 左邊是第n個燈 輸入t,輸入開始的狀態 問你在第t秒時,燈的狀態時什麼樣的,輸出來。分析 可推出下一秒的狀態a i a i 1 n n a i ...