題意:給定一棵n
nn個點的二叉樹,葉子的權值輸入給定且互不相同,非葉子結點i
ii的權值有p
ip_i
pi的概率為兒子結點權值最大值,1−p
i1-p_i
1−pi
的概率為最小值。求根結點取每種值的概率。模998244353
998244353
998244
353。
n ≤3
×105
n\leq 3\times 10^5
n≤3×10
5這都能線段樹合併……覺了
設f (u
,x
)f(u,x)
f(u,x)
為u
uu點值為x
xx的概率,l,r
l,rl,
r為它的左右兒子
容易寫出
f (u
,x)=
px[f
(l,x
)∑i=
1x−1
f(r,
i)+f
(r,x
)∑i=
1x−1
f(l,
i)]+
(1−p
x)[f
(l,x
)∑i=
x+1m
f(r,
i)+f
(r,x
)∑i=
x+1m
f(l,
i)
]f(u,x)=p_x[f(l,x)\sum_^f(r,i)+f(r,x)\sum_^f(l,i)]+(1-p_x)[f(l,x)\sum_^mf(r,i)+f(r,x)\sum_^mf(l,i)]
f(u,x)
=px
[f(l
,x)i
=1∑x
−1f
(r,i
)+f(
r,x)
i=1∑
x−1
f(l,
i)]+
(1−p
x)[
f(l,
x)i=
x+1∑
mf(
r,i)
+f(r
,x)i
=x+1
∑mf
(l,i
)]考慮線段樹合併
設當前合併的區間是[l,
r]
[l,r]
[l,r
],在遞迴的時候順便維護兩個線段樹結點[1,
l−1]
[1,l-1]
[1,l−1
]和[r+1
,m
][r+1,m]
[r+1,m
]的和,乘到f(l
,x
)f(l,x)
f(l,x)
和f (r
,x
)f(r,x)
f(r,x)
上面,維護乙個乘法標記。
文字不太好講清楚,建議直接看**。
複雜度o(n
logn)
o(n\log n)
o(nlogn)
#include
#include
#include
#include
#include
#define maxn 300005
using
namespace std;
inline
intread()
const
int mod=
998244353
;typedef
long
long ll;
inline
intqpow
(int a,
int p)
return ans;
}namespace sgt
inline
void
pushmul
(int x,
int v)
inline
void
pushdown
(int x)
}inline
intnewnode()
void
insert
(int
& x,
int l,
int r,
int k)
intmerge
(int x,
int y,
int l,
int r,
int xmul,
int ymul,
int v)
void
getans
(int x,
int l,
int r,
int*
&ans)
}using sgt::insert;
using sgt::merge;
using sgt::getans;
int rt[maxn]
,ch[maxn][2
],p[maxn]
,v[maxn]
,m;void
dfs(
int u)
int ans[maxn]
;int
main()
int t=
qpow
(10000
,mod-2)
;for
(int i=
1;i<=n;i++
)sort
(v+1
,v+m+1)
;for
(int i=
1;i<=n;i++)if
(!ch[i][0
])p[i]
=lower_bound
(v+1
,v+m+
1,p[i]
)-v;
dfs(1)
;int
* p=ans+1;
getans
(rt[1]
,1,m,p)
;int res=0;
for(
int i=
1;i<=m;i++
) res=
(res+
(ll)i*v[i]
%mod*ans[i]
%mod*ans[i]
)%mod;
printf
("%d\n"
,res)
;return0;
}
PKUWC2018 隨機遊走
loj 2542.pkuwc 2018 隨機遊走 最值反演 樹上期望dp 其實不是很難啦 min max容斥既視感 設f x 表示從x走到s中第乙個點的期望步數 f x 1 d x f fa x 1 d x f ch x 1 這個有環 利用f x a f fa x b的套路代換 得到a,b的遞推式 ...
PKUWC2018 隨機演算法
題意 給定乙個圖 n 20 定義乙個求最大獨立集的隨機化演算法 產生乙個排列,依次加入,能加入就加入 求得到最大獨立集的概率 本質就是計數題 每個點有三種狀態 考慮過且在獨立集中,考慮過未在獨立集中,未考慮 本來在集合裡的點不能知道有哪些,而且不能加入的點的排列也不好確定。乙個好的方法是 把考慮過的...
PKUWC2018 隨機演算法
題目 思博狀壓寫不出是不是沒救了呀 首先我們直接狀壓當前最大獨立集的大小顯然是不對的,因為我們的答案還和我們考慮的順序有關 我們發現最大獨立集的個數好像不是很多,可能是 o n 級別的,於是我們考慮從這個方面入手 我們求出所有的最大獨立集,考慮求出有多少種考慮順序能夠恰好得到這個最大獨立集 設當前已...