看完題解才發現講題的時候講的是什麼屎,你說的分段是指分兩段嗎.......
簡要題意:取值如果是整數可以直接dp,但是如果是實數怎麼辦?給定你一棵樹(不一定是二叉樹),每個點有個隨機點權,在\([0,a[u]]\)均勻分布,問你這棵樹滿足堆性質(小根堆)的概率是多少?
邊界條件很好辦,不論咋樣都是合法的,但是怎麼轉移呢??
假若\(x_u=x\),那麼如果要合法,就要保證\(x_< x\),而這個概率就是\(f_(x)\)(因為概率分布函式是連續的),所以
\[p(x_u=x)=\prod_ p(x_v>x)
\]但是\(x\)是連續的隨機變數,我們只能通過\(f,f\)來轉移。設\(low[x]\)表示\(x\)子樹內最小的\(a[u]\)值,那麼這個值是最小滿足條件(合法且在定義域內)的值(實際上取不到,只能無限接近),所以\(p(x_x>t)=f(low[x])-f(t)\)。設\(=h_u(x)\)
根據一些前置姿勢(概率論與數理統計上有),\(f_x(t)=p(x_x=t)\),根據書上的關係就有\(f(x)=\int f(x)\),那麼直接積分一下就好了
答案是\(h_(+\inf)=f_[0]\)
//@winlere
#include#include#include#include#includeusing namespace std; typedef long long ll;
inline int qr()
typedef vectorpoly;
const int mod=1e9+7;
const int maxn=3e2+5;
poly f[maxn],e[maxn];
int low[maxn],a[maxn],n,rt;
int mod(const int&x)
int mod(const int&x,const int&y)
poly operator * (poly a,poly b)
void int(poly&x)
int f(const poly&x,int g)
void add(int fr,int to)
void dfs(int now);
int(f[now]); f[now][0]=f(f[now],low[now]);
for(int t=1,ed=f[now].size();t}int main()
dfs(rt);
printf("%d\n",f[rt][0]);
return 0;
}
概率論學習
離散型隨機變數的值和概率的分布列表 在很多教材中,這樣的列表都被叫做離散型隨機變數的 概率分布 其實嚴格來說,它應該叫 離散型隨機變數的值分布和值的概率分布列表 這個名字雖然比 概率分布 長了點,但是對於我們這些笨學生來說,肯定好理解了很多。因為這個列表,上面是值,下面是這個取值相應取到的概率,而且...
概率論基礎
概率論 第一章 隨機事件及其概率 分為兩類 1.確定性現象 2.隨機現象 1.1隨機事件及其運算 1.隨機試驗與樣本空間 隨機試驗具有下列三個特徵 1 試驗可在相同條件下重複進行 2 試驗的結果不止乙個 3 每次實驗之前,不能判定哪乙個結果將會出現 用e表示隨機試驗。試驗e中的每乙個可能結果稱為基本...
概率論筆記
注 本文用 表示並運算,表示交運算,a 表示a的逆事件 樣本空間 乙個試驗中所有可能情況組成的集合 事件的關係與運算 a包含於b a發生 b發生 a並b a與b的和事件 a或b發生 a交b a與b的積事件 ab同時發生 a b a與b的差事件 a發生b不發生 a b互斥 不相容 a交b 空集 a b...