思路

看到异或,容易联想到二进制位之间是相互独立的,所以可以把问题变成每个二进制位为1的概率再乘上(1<<pos)的值

假设现在考虑到pos位,设f[i]为第i个节点期望的异或和第pos位是1的概率,有这样的转移方程

\[f[u]=\frac{1}{d[u]}\sum_{v}[w[i]_{pos}=1]?(1-f[v]):f[v]
\]

这是一个逆推的方程,所以f[n]=0,f[1]就是答案

然后这个方程互相依赖,所以上高斯消元求解即可

代码

注意有点卡精度,换成long double可AC

另外自环不能加两次

  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cstring>
  4. #include <cmath>
  5. #define double long double
  6. using namespace std;
  7. const double eps = 1e-9;
  8. int n,m,u[20100],v[20100],w[20100],fir[110],nxt[20100],cnt,d[110];
  9. double a[110][110],ans;
  10. void addedge(int ui,int vi,int wi){
  11. ++cnt;
  12. u[cnt]=ui;
  13. v[cnt]=vi;
  14. w[cnt]=wi;
  15. nxt[cnt]=fir[ui];
  16. fir[ui]=cnt;
  17. }
  18. double gauss(void){
  19. for(int i=1;i<=n;i++){
  20. for(int j=i;j<=n;j++){
  21. if(fabs(a[j][i])>eps){
  22. for(int k=1;k<=n+1;k++)
  23. swap(a[i][k],a[j][k]);
  24. // break;
  25. }
  26. }
  27. for(int j=1;j<=n;j++){
  28. if(i==j)
  29. continue;
  30. double rates=a[j][i]/a[i][i];
  31. for(int k=i;k<=n+1;k++)
  32. a[j][k]=a[j][k]-rates*a[i][k];
  33. }
  34. }
  35. return a[1][n+1]/a[1][1];
  36. }
  37. void make(int pos){
  38. memset(a,0,sizeof(a));
  39. a[n][n]=1;
  40. for(int i=1;i<=n-1;i++){
  41. a[i][i]+=d[i];
  42. for(int j=fir[i];j;j=nxt[j]){
  43. if((w[j]>>pos)&1){
  44. a[i][v[j]]+=1;
  45. a[i][n+1]+=1;
  46. }
  47. else{
  48. a[i][v[j]]-=1;
  49. }
  50. }
  51. }
  52. double mid=gauss();
  53. // printf("mid=%lf\n",mid);
  54. ans=(ans+(1<<pos)*mid);
  55. }
  56. int main(){
  57. scanf("%d %d",&n,&m);
  58. for(int i=1;i<=m;i++){
  59. int a,b,c;
  60. scanf("%d %d %d",&a,&b,&c);
  61. addedge(a,b,c),d[a]++;
  62. if(a!=b)
  63. addedge(b,a,c),d[b]++;
  64. }
  65. for(int i=0;i<32;i++){
  66. make(i);
  67. }
  68. printf("%.3Lf\n",ans);
  69. return 0;
  70. }

P3211 [HNOI2011]XOR和路径的更多相关文章

  1. 洛谷P3211 [HNOI2011]XOR和路径(期望dp+高斯消元)

    传送门 高斯消元还是一如既往的难打……板子都背不来……Kelin大佬太强啦 不知道大佬们是怎么发现可以按位考虑贡献,求出每一位是$1$的概率 然后设$f[u]$表示$u->n$的路径上这一位为$ ...

  2. 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径

    2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 682  Solved: 384[Submit][Stat ...

  3. BZOJ2337: [HNOI2011]XOR和路径

    题解: 异或操作是每一位独立的,所以我们可以考虑每一位分开做. 假设当前正在处理第k位 那令f[i]表示从i到n 为1的概率.因为不是有向无环图(绿豆蛙的归宿),所以我们要用到高斯消元. 若有边i-& ...

  4. BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )

    一位一位考虑异或结果, f(x)表示x->n异或值为1的概率, 列出式子然后高斯消元就行了 --------------------------------------------------- ...

  5. BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]

    2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...

  6. [HNOI2011]XOR和路径 && [HNOI2013]游走

    [HNOI2011]XOR和路径 题目大意 具体题目:戳我 题目: 给定一个n个点,m条边的有重边.有自环的无向图,其中每个边都有一个边权. 现在随机选择一条1到n的路径,路径权值为这条路径上所有边权 ...

  7. 【BZOJ 2337】 2337: [HNOI2011]XOR和路径(概率DP、高斯消元)

    2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1170  Solved: 683 Description ...

  8. 【BZOJ2337】[HNOI2011]XOR和路径 期望DP+高斯消元

    [BZOJ2337][HNOI2011]XOR和路径 Description 题解:异或的期望不好搞?我们考虑按位拆分一下. 我们设f[i]表示到达i后,还要走过的路径在当前位上的异或值得期望是多少( ...

  9. [Wc2011] Xor 和 [HNOI2011]XOR和路径

    Xor F.A.Qs Home Discuss ProblemSet Status Ranklist Contest 入门OJ ModifyUser  autoint Logout 捐赠本站 Prob ...

随机推荐

  1. 将n的k位清0

    实例三:将n的k位清0 方法: result= n &~(1<<k) 使第k为变成0,再与运算,0和任何数进行与运算都是0. 解释:  0000 0001 ---- 1 左移k位 ...

  2. html5-新增表单的小结details summary

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  3. java一维数组作业

    package zuoYe; import java.util.Scanner; public class MaxSubArray { public static void main(String[] ...

  4. samba共享目录无法访问的一般解决方案,非用户登录和读写权限问题

    配smb,被第四点坑了很久,特此转载. 由于这5点都是比较普通的情况,不涉及用户登录和读写权限问题 1)关闭防火墙: #sevice iptables stop 2)修改 /etc/samba/smb ...

  5. javamail发送邮件及错误解决方法javax.mail.AuthenticationFailedException: failed to connect, no password specified?

    javamail发送邮件及错误解决方法javax.mail.AuthenticationFailedException: failed to connect, no password specifie ...

  6. Java技术学习路线笔记:Maven安装和作用

    Maven是一个基于项目对象模型(POM)的概念的纯java开发的开源的项目管理工具.主要用来管理java项目,进行依赖管理(jar包管理,能自动分析项目所需的依赖软件包,并到Maven仓库区下载)和 ...

  7. The Little Prince-11/26

    WRITE BEFORE THE BOOK REVIEW I have read The Little Prince for three or four times. However I still ...

  8. JS笔记—01

    1.JS的代码一般在头部写2.当页面载入时,会执行位于body部分的JavaScript当被调用时,位于head部分的JavaScript被执行.3.要对外部的JS文件的一个变量操作,代码是写在内部J ...

  9. Google's Machine Learning Crash Course #04# First Steps with TensorFlow

    1.使用 TensorFlow 的建议 Which API(s) should you use? You should use the highest level of abstraction tha ...

  10. select2 AJAX获取数据

    页面效果: index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...