点边容斥小记
前言
一场模拟赛中用到了此 trick,于是写一下。
技巧内容
点边容斥顾名思义与点与边有关,常用于的场景有:路径无交边/点,连通块个数等图论问题。
例题 1
- 给定一棵树,和若干个点对,第 \(i\) 个点对有 \(p_i\) 的概率消失,一个点对有贡献当且仅当与没有消失的点对的路径无交边,求期望的贡献,每个点对的贡献为 1。
考虑如何刻画两个点对路径无交边,因为路径的交也是一条路径,如果有交点当且仅当路径的交满足 \(E=V-1\),不妨顺着此思路延申到有交边的情况,点可以理解为长度为 0 的链,记再路径的交上,长度为 \(x\) 的链的数量为 \(cnt_x\),为那么上式就是 \(cnt_0-cnt_1=1\),因此有交边的情况可拓展为 \(cnt_1-cnt_2=1\),因此我们知道了判是否有交边的条件。
回到题目中,先利用期望的线性性转化为每个点对贡献的概率,第 \(i\) 个点对贡献的概率为 \((1-p_i)\times \prod\limits_{点对 x与 i 有交边}p_x\),考虑如何求后者。
这时要用到上述技巧,因为路径有交边时 \(cnt_1-cnt_2=1\),反之有 \(cnt1-cnt_2=0\),发现每个 \(p_i\) 的贡献恰好是 \(p_i=p_i^{cnt_1-cnt_2}\)。因此题目被转化为了维护树上边和长为 \(2\) 的链,这里边维护的是 \(\prod p_i\) 而后者则是维护 \(\prod \frac{1}{p_i}\),因为该问题是静态的,所以树上差分+查询即可。