BZOJ 3270: 博物館

傳送門

顯然可以狀態轉移:

設 $f[k][x][y]$ 表示第 $k$ 時刻,第一個人在 $x$ ,第二個人在 $y$ 時的概率

那么轉移顯然:

$f[k][x][y]+=\sum_{u}\sum_{v}f[k-1][u][v]*(1-P_u)(1-P_v)/du[u]/du[v]$

其中 $u$ 和 $x$ 有邊相連,$v$ 和 $y$ 有邊向連,$du[i]$ 表示節點 $i$ 的度數,并且 $u!=v$

當然這只是一種情況的轉移,還有三種情況:

$f[k][x][y]+=\sum_{u}f[k-1][u][y]*(1-P_u)P_y/du[u]$

$f[k][x][y]+=\sum_{v}f[k-1][x][v]*(1-P_v)P_x/du[v]$

$f[k][x][y]+=f[k-1][x][y]*P_x*P_y$

然后顯然可以矩陣優化暴力轉移 ,復雜度 $O(n^6log_k)$,$k$ 是轉移步數,精度玄學

正解是考慮設 $f[x][y]$ 表示兩人從起點到終點,經過狀態 $(x,y)$ 即第一個人在 $x$,第二個人在 $y$ 的期望次數

狀態轉移的方程好像也差不多

$f[x][y]+=\sum_{u}\sum_{v}f[u][v]*(1-P_u)(1-P_v)/du[u]/du[v]$

$f[x][y]+=\sum_{u}f[u][y]*(1-P_u)P_y/du[u]$

?

$f[x][y]+=\sum_{v}f[x][v]*(1-P_v)P_x/du[v]$

?

$f[x][y]+=f[x][y]*P_x*P_y$

因為兩人在同一個點時就不會繼續走了,所以從起點出發兩人在 $i$ 點相遇的概率就是兩人從起點到終點,經過狀態 $(i,i)$ 的期望次數($f[i][i]$)

這個方程轉移有環,可以列出所有轉移方程然后用高斯消元解方程組

復雜度 $O(n^6)$

?

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
typedef double db;
inline int read()
{int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }return x*f;
}
const int N=507;
int fir[N],from[N<<1],to[N<<1],cntt;
inline void add(int a,int b) { from[++cntt]=fir[a],fir[a]=cntt,to[cntt]=b; }
int n,m,nn,pa,pb,id[N][N],du[N];
db P[N],A[N][N],ans[N];
void Gauss()//高斯消元解方程組
{int pos;for(int i=1;i<=nn;i++){pos=0;for(int j=i;j<=nn;j++) if(fabs(A[j][i])>fabs(A[pos][i])||!pos) pos=j;swap(A[i],A[pos]);for(int j=i+1;j<=nn;j++){db w=A[j][i]/A[i][i];for(int k=i;k<=nn+1;k++) A[j][k]-=w*A[i][k];}}for(int i=nn;i;i--){for(int j=i+1;j<=nn;j++) A[i][nn+1]-=ans[j]*A[i][j];ans[i]=A[i][nn+1]/A[i][i];}
}
int main()
{n=read(),m=read(),pa=read(),pb=read();nn=n*n; int now=0,a,b;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) id[i][j]=++now;for(int i=1;i<=m;i++){a=read(),b=read();add(a,b); add(b,a);du[a]++; du[b]++;}for(int i=1;i<=n;i++) scanf("%lf",&P[i]);for(int i=1;i<=n;i++)//枚舉ufor(int j=1;j<=n;j++)//枚舉v
        {if(i==j) continue;//注意如果i=j就不能轉移for(int k=fir[i];k;k=from[k])//枚舉xfor(int l=fir[j];l;l=from[l])//枚舉yA[ id[to[k]][to[l]] ][id[i][j]]-=(1.0-P[i])*(1.0-P[j])/du[i]/du[j];for(int k=fir[i];k;k=from[k]) A[ id[to[k]][j] ][id[i][j]]-=(1.0-P[i])*P[j]/du[i];for(int k=fir[j];k;k=from[k]) A[ id[i][to[k]] ][id[i][j]]-=(1.0-P[j])*P[i]/du[j];A[id[i][j]][id[i][j]]-=P[i]*P[j];//構造矩陣
        }for(int i=1;i<=nn;i++) A[i][i]++;A[id[pa][pb]][nn+1]=1;//起點初始為1
    Gauss();for(int i=1;i<=n;i++) printf("%.6lf ",ans[id[i][i]]);return 0;
}

?

轉載于:https://www.cnblogs.com/LLTYYC/p/10837689.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393765.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393765.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393765.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

graphpad7.04多組比較p值_同是折線圖為何你卻這么優秀,這才是多組數據作圖應該有的樣子...

相信大家對Excel做折線圖應該不陌生&#xff0c;在展示數據的時候&#xff0c;圖表是一種最好的展示方法。但是經常會碰到一種尷尬的事情就是&#xff0c;當數據維多比較多的時候&#xff0c;做出的圖表就會顯得非常難看。今天我們就來學習一下&#xff0c;多組數據怎么做折線圖…

Logic-算法-八個箱子找一個最輕的

ylbtech-Arithmetic:Logic-算法-八個箱子找一個最輕的-- -- ylb&#xff1a;算法-- Type:算法[logic]-- munu:八個箱子-找一個最輕的-- thankyou:gaoZhimin -- 7:11 2012/3/17-- 有八個正方形的箱子&#xff0c;外觀大小都一樣&#xff0c;其中七個是50斤的&#xff0c;一個是…

由衷的信來激勵有抱負的開發人員

by Logan Wright洛根賴特(Logan Wright) 由衷的信來激勵有抱負的開發人員 (A heartfelt letter to inspire the aspiring developer) I’m writing a letter to my friend. You should read it. He studies Computer Science, and he hates it. I build React Apps and I love…

linux 運行 chom,Hadoop安裝-單節點/偽分布(2.7.3)

1&#xff0c;下載Hadoop目前在Ubuntu的軟件庫里面 沒有發現Hadoop的壓縮包&#xff0c;沒猜錯Hadoop不是可執行文件 只是一個壓縮包吧&#xff01;所以我們只能自己到官網下載(http://hadoop.apache.org/releases.html)&#xff1b;在Apache社區中&#xff0c;下載軟件的時候…

leetcode944. 刪列造序

給定由 N 個小寫字母字符串組成的數組 A&#xff0c;其中每個字符串長度相等。 你需要選出一組要刪掉的列 D&#xff0c;對 A 執行刪除操作&#xff0c;使 A 中剩余的每一列都是 非降序 排列的&#xff0c;然后請你返回 D.length 的最小可能值。 刪除 操作的定義是&#xff1…

python學習:re模塊

常用正則表達式符號 123456789101112131415161718192021. 默認匹配除\n之外的任意一個字符&#xff0c;若指定flag DOTALL,則匹配任意字符&#xff0c;包括換行^ 匹配字符開頭&#xff0c;若指定flags MULTILINE,這種也可以匹配上(r"^a","\nabc\neee&qu…

app之---豆果美食

1.抓包 2.代碼 抓取&#xff1a; #!/usr/bin/env python # -*- coding: utf-8 -*- #author tom import requests from multiprocessing import Queue from handle_pymongo import mongo from concurrent.futures import ThreadPoolExecutorclass Douguo():def __init__(self):s…

語言坐標度分秒的換算_測量位置度說明

測量位置度說明位置度是限制被測要素的實際位置對理想位置變動量的指標。它的定位尺寸為理論正確尺寸。位置度公差在評定實際要素位置的正確性, 是依據圖樣上給定的理想位置。位置度包括點的位置度、線的位置度和面的位置度。[1] 點的位置度:如公差帶前加S&#xffe0;&#xf…

OpenStack創建win7實例遇到的問題(尚未解決,求幫助)

原地址在這里&#xff1a;&#xff08;作者也是我&#xff0c;害羞&#xff09;http://www.aboutyun.com/forum.php?modviewthread&tid22898 小白經過兩天嘗試&#xff0c;用fuel部署好了OpenStack的云平臺&#xff0c;接下來想在Compute節點上創建一個win7 實例&#xff…

VMware使兩臺windows虛擬機能夠互相ping通

如果以下內容測試無效&#xff0c;可參考另一篇&#xff1a;VMware虛擬機配置內網電腦能訪問 1.關閉防火墻 cmd命令行里輸入&#xff1a;netsh firewall set opmode disable 2.測試如果還不能ping通&#xff0c;就把網絡類型選nat類型 3.測試&#xff1a;vmware網關默認是.2 轉…

linux賬號前有個base,安裝 aconda 后Linux的終端界面前部出現(base)字樣

aconda 是做什么用的這里就不說了&#xff0c;一般玩Python的都知道這東西&#xff0c;最早接觸這東西是因為它把NVIDIA中cuda計算和Python互連的一個庫拿下了&#xff0c;是買下來了還是專業&#xff0c;還是唯一合作的也就記不清了&#xff0c;那就是 numba , 那些年頭Python…

回復郵件時如何不要郵件頭_如何為閱讀,點擊和回復率達到100%的CEO設計一封冷郵件...

回復郵件時如何不要郵件頭by Theo Strauss由西奧斯特勞斯(Theo Strauss) 如何為閱讀&#xff0c;點擊和回復率達到100&#xff05;的CEO設計一封冷郵件 (How to design a cold email for a CEO with a 100% read, click, and response rate) 銀河電子郵件指南&#xff1a;第二…

leetcode1007. 行相等的最少多米諾旋轉(貪心)

在一排多米諾骨牌中&#xff0c;A[i] 和 B[i] 分別代表第 i 個多米諾骨牌的上半部分和下半部分。&#xff08;一個多米諾是兩個從 1 到 6 的數字同列平鋪形成的 —— 該平鋪的每一半上都有一個數字。&#xff09; 我們可以旋轉第 i 張多米諾&#xff0c;使得 A[i] 和 B[i] 的值…

Spring 學習教程(一): 認識 Spring 框架

Spring 框架是 Java 應用最廣的框架&#xff0c;它的成功來源于理念&#xff0c;而不是技術本身&#xff0c;它的理念包括 IoC (Inversion of Control&#xff0c;控制反轉) 和 AOP(Aspect Oriented Programming&#xff0c;面向切面編程)。 Spring 的框架結構 Data Access/Int…

小米網關控制空調伴侶_小米有品上架移動空調,支持語音控制

近日小米有品商城上架了一款互聯網可移動空調&#xff0c;機身僅有小米空氣凈化器一般大小&#xff0c;底部安裝了萬向輪&#xff0c;支持多方位自由移動&#xff0c;擁有三大功能&#xff0c;兼顧去暑除濕能力&#xff0c;產品售價1599元&#xff0c;有需求的用戶可以在小米有…

錯誤: 找不到符號

Error:(31, 29) 錯誤: 找不到符號 符號: 類 OnLaunchPluginCallback 位置: 類 IreaderPlugApi 明明我都可以ctrl 單擊點過去&#xff0c;但是就是運行的時候報錯。說錯誤: 找不到符號。 我試了兩遍&#xff0c;把工程clearn, 刪除build下面的文件夾&#xff0c;弄了兩遍&am…

leetcode910. 最小差值 II(貪心)

給定一個整數數組 A&#xff0c;對于每個整數 A[i]&#xff0c;我們可以選擇 x -K 或是 x K&#xff0c;并將 x 加到 A[i] 中。 在此過程之后&#xff0c;我們得到一些數組 B。 返回 B 的最大值和 B 的最小值之間可能存在的最小差值。 示例 1&#xff1a; 輸入&#xff1…

laravel 檢測sql_在Laravel PHP應用程序中輕松進行面部檢測

laravel 檢測sqlby Darren Chowles達倫喬爾斯(Darren Chowles) 在Laravel PHP應用程序中輕松進行面部檢測 (Easy facial detection in your Laravel PHP application) 使用Google Cloud Vision API檢測圖像中的人臉 (Detect faces in images using the Google Cloud Vision AP…

mysql學習筆記-insert擴展

1、創建表 -利用已有表&#xff0c;創建表 這樣創建的缺點-- 主鍵會丟失 -- 創建表&#xff0c;表結構與數據與t_emptest 一致 CREATE TABLE t_emptest1 AS SELECT * FROM t_emptest ;-- 創建空表&#xff0c;表結構與t_emptest 一致 CREATE TABLE t_emptest1 AS SELECT * FRO…

linux 調用外部變量,sed當中使用變量替換以及執行外部命令

轉自&#xff1a;http://blog.csdn.net/linwhwylb/article/details/7184748在使用sed對日志或者其它文本進行parse的過程當中&#xff0c;有時候我們需要引用外部變量的值&#xff0c;或者獲取一個shell命令執行的結果&#xff0c;以便達到更加可觀的輸出結果。這里介紹如何做到…