BZOJ-2337-XOR和路径

本文介绍了一种使用二进制边权计算图中从节点i到节点n的期望路径长度的方法。通过将边权转换为二进制形式,并利用异或运算的性质,可以建立关于节点i的期望路径长度f[i]的方程组。通过对这些方程进行高斯消元求解,最终得到所有节点的期望路径长度。
摘要由CSDN通过智能技术生成

描述

这里写图片描述


分析

  • 转化为二进制按位来计算, 最后把每一位的加起来
  • f[i]表示i到n的期望路径长度, d[i]表示i的度
  • 因为i的期望是由i走到的点状态转移得到的, 所以在计算概率时应该用i的度来算
  • 如果i到j的边的权值的第 BIT 位是0, 任何数异或0都是它本身, 所以f[i] = f[j] / d[i] + …
  • 如果i到j的边的权值的第 BIT 位是1, 异或一相当于取反. 所以f[i] = (1-f[j]) / d[i] + …
  • 然后列出f[i]的方程, 移项使所有的f值在左边, 右边剩一堆常数, 就可以高斯消元了.
  • 有n个方程, n个变量. 解出X, ans = sum{X[0] * (1 << BIT) | 0 <= BIT < 30 即可}

代码

https://code.csdn.net/snippets/619507

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值