HDU 5607 graph(矩陣乘法)

2022-05-14 11:30:07 字數 1054 閱讀 2215

在乙個 \(n\) 個節點 \(m\) 條邊的有向圖上隨機遊走,有 \(q\) 個詢問,每次給定乙個起點 \(u\) 和步數 \(k\) ,每次回答最後停在每個節點的概率。

\(1 \leq n \leq 50\)

\(1 \leq m \leq 1000\)

\(1 \leq q \leq 20\)

\(1 \leq k \leq 10^9\)

同樣構造乙個「起始矩陣」 \(a_\) 和乙個「轉移矩陣」 \(b_\) 。如果知道 \(b_\) 的含義,就是 \(i\) 點到 \(j\) 點的「轉移係數」 ,矩陣乘法就不是問題了。

對於每個詢問 \((u,k)\) ,\(a_=1\) ,\(b_\) 為 \(i\) 點走到 \(j\) 點的概率,然後輸出 \(a*b^k\) 矩陣的每一項即可。

#include#define for(i,x,y) for(int i=(x),i##end=(y);i<=i##end;++i)

#define dor(i,x,y) for(int i=(x),i##end=(y);i>=i##end;--i)

typedef long long ll;

using namespace std;

const int n=55;

const int m=1005;

const int p=1e9+7;

struct matrix

void resize(int _n,int _m)

matrix operator *(const matrix &_)const

return res;

} matrix operator *=(const matrix &_)

};ll inv[m];

matrix a,b;

int oud[n],u[m],v[m];

int n,m,q;

matrix pow(matrix a,int p)

ll frac(ll x,ll y)

int main()

} return 0;

}

HDU 5607 graph(矩陣優化 概率DP)

該題非常easy想到求概率的轉移方程 用d i j 表示第i步,走到j點的概率。可是該題的k高達1e9。所以依照套路。要用矩陣相乘來優化。第一次寫矩陣相乘。大概的意思就是利用矩陣實現遞推。而且由於每次遞推的過程一樣,所以就相當於右乘這個矩陣的k次方。用矩陣高速冪就可以。矩陣相乘這個問題,大概能夠看成...

HDU 5607 graph(矩陣優化 概率DP)

該題非常easy想到求概率的轉移方程 用d i j 表示第i步,走到j點的概率。可是該題的k高達1e9。所以依照套路。要用矩陣相乘來優化。第一次寫矩陣相乘。大概的意思就是利用矩陣實現遞推。而且由於每次遞推的過程一樣,所以就相當於右乘這個矩陣的k次方。用矩陣高速冪就可以。矩陣相乘這個問題,大概能夠看成...

HDU 4467 Graph(莫隊思想)

題意 給你n個點,m條邊,每條邊有乙個權值,有兩個操作,乙個是修改單點的顏色 顏色只有0,1兩種 乙個是詢問邊的兩個端點都為指定顏色的權值和。思路 由於每個點的顏色只有0,1兩種,那麼答案只有3種情況 00,01,11 用乙個陣列維護即可。即ans 0 統計邊的兩端都是0的權值和,ans 1 統計邊...