【HNOI2011/bzoj2337】XOR和路径

第二道高斯消元练习题


题意

一张无向图,从点 $1$ 出发每次随机选一条出边走,走到 $n$ 停止,求经过的所有边权异或和的期望。

$n\le 100$

题解

注意一点,异或和的期望 $≠$ 期望的异或和,因为期望是小数,但小数(在 c++ 里)不能异或,而且“期望”具体是什么期望啊。

 

异或有一个神奇的性质就是每个二进制位互不关联。

所以我们可以拆开考虑每一个二进制位的异或和。

拆位考虑后,还能发现一位的异或和只能是 $0$ 或 $1$,还比较好维护。

对于当前考虑的一个二进制位,设 $dp(i)$ 表示走到点 $i$ 时异或和为 $1$ 的概率,则 $1-dp(i)$ 表示异或和为 $0$ 的概率。

转移也比较显然:$$f(i) = \frac{\sum_{w=0} f(x) + \sum_{w=1} (1-f(x))}{du_i}$$

其中点 $x$ 表示与点 $i$ 直接相连的点,$w$ 表示这条连边的边权。

通过拆 $\sum$、移项得到 $$-\sum_{w=1} 1 = \sum_{w=0} f(x) - \sum_{w=1} f(x) - f(i)\times du_i$$

这就是标准高斯消元的方程了。

 

合并每个二进制位的答案:$ans+=2^i\times dp_i(n)$

转载于:https://www.cnblogs.com/scx2015noip-as-php/p/bzoj2337.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值