zoukankan      html  css  js  c++  java
  • 【HNOI2011/bzoj2337】XOR和路径

    第二道高斯消元练习题


    题意

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

    $nle 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) imes du_i$$

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

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

  • 相关阅读:
    列表推导式,生成器表达式
    迭代器,生成器初始
    装饰器的进阶
    函数名用途,初始装饰器
    函数参数,和空间
    py文件的操作
    字符串相关操作
    python基础二
    Django简介
    Django初识
  • 原文地址:https://www.cnblogs.com/scx2015noip-as-php/p/bzoj2337.html
Copyright © 2011-2022 走看看