BZOJ1778 期望 高斯消元

2021-09-10 03:45:42 字數 1751 閱讀 5316

[bzoj1778]

給你一張n

nn個點m

mm條邊的無向圖,最開始有一顆炸彈在一號節點,它有p

q\frac

qp​​的概率**,如果沒有**,它會等概率的移動到另乙個與當前節點相連的點,問炸彈分別在每個點**的概率。

考慮一維的向量矩陣a

aa,第i

ii位表示炸彈停在i

ii點的概率是aia_

ai​,那麼初始時炸彈停在1

11號節點a=(

1,0,

0,..

.,0,

0)

a=(1,0,0,...,0,0)

a=(1,0

,0,.

..,0

,0),考慮如何轉移,設did_

di​表示i

ii點的度數,那麼有aia_

ai​=∑(1

−pq)

∗1dj

∗a

j\sum(1-\frac)*\frac}*a_

∑(1−qp

​)∗d

j​1​

∗aj​

(j

jj為i

ii能到達的點)。那麼可以建立乙個n∗n

n*nn∗

n的矩陣b

bb,bi,

j=(1

−pq)

∗1dj

b_=(1-\frac)*\frac}

bi,j​=

(1−q

p​)∗

dj​1

​,那麼最終答案矩陣ans

ansan

s=(a+a

⋅b+a

⋅b⋅b

+...

+a⋅b

oo

)(a+a\cdot b+a\cdot b\cdot b+...+a\cdot b^)

(a+a⋅b

+a⋅b

⋅b+.

..+a

⋅boo

),等比數列求和得到ans

=ai−

bans=\frac

ans=i−

ba​,ans

⋅(i−

b)=a

ans\cdot (i-b)=a

ans⋅(i

−b)=

a,直接高斯消元即可。

#include#define rep(i,a,b) for(int i=(a);i<=(b);i++)

#define per(i,a,b) for(int i=(a);i>=(b);i--)

using namespace std;

const double eps=1e-15;

const int n=500;

struct nodee[100010];

int lin[100010],d[n],len=0,n,m,x,y;

double a[n][n],ans[n],p,q;

void read(int x,int y)

bool gauss()

} ans[n]=a[n][n+1];

per(i,n-1,1)

}return 1;

}int main()

a[1][n+1]=1;

rep(x,1,n)

} gauss();

rep(i,1,n)printf("%.9lf\n",ans[i]*p+eps);

return 0;

}

BZOJ2337 期望 高斯消元

很久沒有寫過高斯消元了,看著別人的 yy了一會。一遍敲出來感覺成就感 而且gauss這個單詞感覺特別帥有沒有!bzoj2337傳送門 突然發現一張圖就把所有題目資訊包含完了,不用手打還有點不習慣 因為原題是要求異或期望,位與位之間沒有影響,所以拆開處理。以下的分析均是針對某一二進位制位上的值 定義f...

遊走 HNOI2013 期望Dp 高斯消元

vjudge 乙個無向連通圖,頂點從1編號到n,邊從1編號到m。小z在該圖上進行隨機遊走,初始時小z在1號頂點,每一步小z以相等的概率隨機選 擇當前頂點的某條邊,沿著這條邊走到下乙個頂點,獲得等於這條邊的編號的分數。當小z 到達n號頂點時遊走結束,總分為所有獲得的分數之和。現在,請你對這m條邊進行編...

高斯消元與期望DP

高斯消元可以解決一系列dp序混亂的無向圖上 期望 dp dp序是一道dp的所有狀態的乙個排列,使狀態x所需的所有前置狀態都位於狀態x前 通俗的說,在乙個狀態轉移方程中 左側的狀態應該在 右側的所有狀態之後 於是往往只有按dp序轉移狀態,才可以保證每個狀態值的正確性 一道dp的狀態序不是唯一的 常見的...