日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡 期望DP+高斯消元

發布時間:2024/4/17 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡 期望DP+高斯消元 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【BZOJ1778】[Usaco2010 Hol]Dotp 驅逐豬玀

Description

奶牛們建立了一個隨機化的臭氣炸彈來驅逐豬玀。豬玀的文明包含1到N (2 <= N <= 300)一共N個豬城。這些城市由M (1 <= M <= 44,850)條由兩個不同端點A_j和B_j (1 <= A_j<= N; 1 <= B_j <= N)表示的雙向道路連接。保證城市1至少連接一個其它的城市。一開始臭氣彈會被放在城市1。每個小時(包括第一個小時),它有P/Q (1 <= P <=1,000,000; 1 <= Q <= 1,000,000)的概率污染它所在的城市。如果這個小時內它沒有污染它所在的城市,那麼它隨機地選擇一條道路,在這個小時內沿著這條道路走到一個新的城市。可以離開這個城市的所有道路被選擇的概率均等。因為這個臭氣彈的隨機的性質,奶牛們很困惑哪個城市最有可能被污染。給定一個豬玀文明的地圖和臭氣彈在每個小時內爆炸的概率。計算每個城市最終被污染的概率。如下例,假設這個豬玀文明有兩個連接在一起的城市。臭氣炸彈從城市1出發,每到一個城市,它都有1/2的概率爆炸。 1--2 可知下面這些路徑是炸彈可能經過的路徑(最后一個城市是臭氣彈爆炸的城市): 1: 1 2: 1-2 3: 1-2-1 4: 1-2-1-2 5: 1-2-1-2-1 ... 要得到炸彈在城市1終止的概率,我們可以把上面的第1,第3,第5……條路徑的概率加起來,(也就是上表奇數編號的路徑)。上表中第k條路徑的概率正好是(1/2)^k,也就是必須在前k-1個回合離開所在城市(每次的概率為1 - 1/2 = 1/2)并且留在最后一個城市(概率為1/2)。所以在城市1結束的概率可以表示為1/2 + (1/2)^3 + (1/2)^5 + ...。當我們無限地計算把這些項一個個加起來,我們最后會恰好得到2/3,也就是我們要求的概率,大約是0.666666667。這意味著最終停留在城市2的概率為1/3,大約為0.333333333。

Input

* 第1行: 四個由空格隔開的整數: N, M, P, 和 Q * 第2到第M+1行: 第i+1行用兩個由空格隔開的整數A_j和B_j表示一條道路。

Output

* 第1到第N行: 在第i行,用一個浮點數輸出城市i被摧毀的概率。誤差不超過10^-6的答桉會 被接受(注意這就是說你需要至少輸出6位有效數字使得答桉有效)。

Sample Input

2 1 1 2
1 2

Sample Output

0.666666667
0.333333333

題解:好吧上來先Orz PoPoQQQ

然后本蒟蒻連題解都看了半天才懂,這里就做一下題解的注釋吧~

1.矩陣的等比數列。。。什么鬼?
矩陣也是滿足結合律的,跟數一樣

2.為什么[I-T]乘過來后跑到了ans右邊?
不然矩乘沒有意義。。。

3.為什么要對[I-T]的轉置求高斯消元?
因為矩乘的法則和方程組的運算法則是不一樣的~你yy一下后會發現正好相反

#include <cstring> #include <iostream> #include <cstdio> #include <cmath> using namespace std; const double eps=1e-10; int n,m,p,q; int pa[50010],pb[50010],d[310]; double v[310][310],ans[310]; int main() {scanf("%d%d%d%d",&n,&m,&p,&q);if(p>q) p=q;int i,j,k;for(i=1;i<=m;i++) scanf("%d%d",&pa[i],&pb[i]),d[pa[i]]++,d[pb[i]]++;v[1][n+1]=1.0*p/q;for(i=1;i<=n;i++) d[i]=max(d[i],1);for(i=1;i<=m;i++){v[pb[i]][pa[i]]-=1.0*(q-p)/q/d[pa[i]];v[pa[i]][pb[i]]-=1.0*(q-p)/q/d[pb[i]];}for(i=1;i<=n;i++) v[i][i]+=1.0;double t;for(i=1;i<=n;i++){for(j=i+1;j<=n;j++) if(fabs(v[j][i])>fabs(v[i][i])) for(k=i;k<=n+1;k++) swap(v[i][k],v[j][k]);for(j=i+1;j<=n;j++){t=v[j][i]/v[i][i];for(k=i;k<=n+1;k++) v[j][k]-=v[i][k]*t;}}for(i=n;i>=1;i--){for(j=i+1;j<=n;j++) v[i][n+1]-=v[i][j]*ans[j];ans[i]=v[i][n+1]/v[i][i];}for(i=1;i<=n;i++) printf("%.9lf\n",ans[i]);return 0; }

轉載于:https://www.cnblogs.com/CQzhangyu/p/7054247.html

總結

以上是生活随笔為你收集整理的【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡 期望DP+高斯消元的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。