在乙個 \(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 統計邊...