解析

不难想到第一步利用期望线性性逐位考虑。
然后就变成求一个布尔变量的期望了,可以直接转化为求概率。

我一开始的想求从1出发异或和为0/1的概率,然而这个东西在原点1附近的转移特别别扭…老出现概率大于1的迷惑情况。
然后我就不会了

正解是反过来想,设 fxf_xfx​ 为从 xxx 出发到 nnn 的路径异或和为1的概率,然后像类似游走的方法转移就行了。

为什么要这样?
首先,本题的图必然联通,此时,从一个点 xxx 必然可以走到 nnn,但从 111 不一定能走到 xxx
比如说 1-3-2 这样的图中,1就是走不到2的。
那么在题解的定义中,1−fx1-f_x1−fx​ 就使 x−>nx->nx−>n 的路径异或和为 000 的概率,而在我的定义中,1−fx1-f_x1−fx​ 则是 111 走不到 xxx 和 1−>x1->x1−>x 路径异或和为0的概率和。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define OK debug("OK\n")
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
const int N=100+20;
const int mod=1e9+7;
int n,m;
struct node{int to,nxt,w;
}p[N*N<<1];
int fi[N],cnt;
inline void addline(int x,int y,int w){p[++cnt]=(node){y,fi[x],w};fi[x]=cnt;
}
int mi[40],o=30;
double a[N][N],ans,f[N];
int d[N];
void gauss(){for(int i=1;i<=n;i++){int id=i;for(int j=i+1;j<=n;j++) if(abs(a[j][i])>abs(a[id][i])) id=j;if(id!=i) swap(a[id],a[i]);for(int j=i+1;j<=n;j++){for(int k=i+1;k<=n+1;k++) a[j][k]-=a[j][i]/a[i][i]*a[i][k];}}for(int i=n;i>=1;i--){f[i]=a[i][n+1]/a[i][i];for(int j=1;j<i;j++) a[j][n+1]-=a[j][i]*f[i];}return;
}
void work(int k){memset(a,0,sizeof(a));for(int i=1;i<=n;i++){a[i][i]=1;if(i==n) continue;for(int o=fi[i];~o;o=p[o].nxt){int j=p[o].to;int op=(p[o].w&mi[k])?1:0;if(op){a[i][n+1]+=1.0/d[i];a[i][j]+=1.0/d[i];}else{a[i][j]+=-1.0/d[i];}}}//for(int i=1;i<=n;i++){//for(int j=1;j<=n+1;j++) printf("%.2lf ",a[i][j]);//puts("");//}gauss();ans+=mi[k]*f[1];
//printf("k=%d f=%lf\n",k,f[1]);
}signed main(){#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifmemset(fi,-1,sizeof(fi));cnt=-1;mi[0]=1;for(int i=1;i<=o;i++) mi[i]=mi[i-1]<<1;n=read();m=read();for(int i=1;i<=m;i++){int x=read(),y=read(),w=read();d[x]++;addline(x,y,w);if(x^y) d[y]++,addline(y,x,w);}for(int i=0;i<=o;i++) work(i);printf("%.3lf\n",ans);
}
/*
*/

YBROJ洛谷P3211:XOR和路径(线性基,期望dp)相关推荐

  1. P4151 [WC2011]最大XOR和路径(线性基)

    P4151 [WC2011]最大XOR和路径 对于求解最大异或和路径,首先边可以重复走,最终的结果一定是一条路径和许多环的异或和,因为路径和环之间的边会被走两次,不会被计算,所以我们可以通过dfs树求 ...

  2. [洛谷3812]【模板】线性基

    题目大意: 给你n个数,求这些数能异或出的数的最大值. 思路: 线性基模板. b中的数满足对于每个b[i],最高位在第i位. 构造方法就是对于每个数字,从高到低枚举每一个1,如果这一位对应的b[i]还 ...

  3. 洛谷P3857 [TJOI2008]彩灯(线性基)

    传送门 线性基裸题 直接把所有的状态都带进去建一个线性基 然后答案就是$2^{cnt}$($cnt$代表线性基里数的个数) 1 //minamoto 2 #include<cstdio> ...

  4. 洛谷P3812 【模板】线性基

    传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 线性基是个啥玩意儿-- 为啥只要消成上三角矩阵就行了?不是得搞成对角矩阵的么? 1 //minamoto 2 #include<cstdio& ...

  5. bzoj 3811: 玛里苟斯【线性基+期望dp】

    这个输出可是有点恶心啊--WA*inf,最后抄了别人的输出方法orz 还有注意会爆long long,要开unsigned long long 对于k==1,单独考虑每一位i,如果这一位为1则有0.5 ...

  6. 【BZOJ2337】XOR和路径,概率期望DP+高斯消元

    Time:2016.08.27 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 与游走思路有一定相似的地方 对答案的每一位进行判断 通过高斯消元解出每个点到n xor路径为1的概率 ...

  7. YBTOJ洛谷P3750:分手是祝愿(期望dp)

    传送门 文章目录 解析 代码 解析 首先,开关开关两次等于没动,所有对于一个解来说,开关的状态只有开与不开之分 接下来的一个关键点是:每一个开关的效果无法被其他开关操作的组合代替 所以这个题应该只有唯 ...

  8. 洛谷 P2574 XOR的艺术

    传送门:洛谷 P2574 XOR的艺术 重题:洛谷 P2846 光开关.洛谷 P3870 开关 算法分析:对懒标记 \(v[k]\) 取 \(xor\),且\([l,r]\)中1的个数取反后即是之后数 ...

  9. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

最新文章

  1. linux elf 文件查看工具 readelf
  2. CF932G Palindrome Partition
  3. 优化体系结构 - 解决多样性数据源
  4. SoftPool算法详解
  5. 《ASP.NET Core 微服务实战》送书结果公告
  6. 控件中的Events个人理解。
  7. C#命名规范,SqlServer命名规范
  8. 吴恩达深度学习 —— 3.1 神经网络概览
  9. jmap查看java进程占用的数据库连接数
  10. 容斥原理 —— 不重不漏的计数
  11. EasyX画动态时钟
  12. 计算机网络布线需要什么材料,计算机网络综合布线的设计方法与流程
  13. r语言 linux使用教程,R语言初级教程: R编程环境的搭建
  14. Rational ClearCase批量merge合并
  15. 事物运动的状态和方式是谁提出的_为什么信息是事物运动的状态和方式??
  16. 【usb】安卓usb网络共享(RNDIS)
  17. 一个有点像舔狗的插件
  18. 高效上网教程---资源软件搜索技巧(搜索好用软件或者app去哪些网站)
  19. 试算平衡表示例图_案例十一试算平衡表
  20. 架构设计:系统存储(16)——Redis事件订阅和持久化存储

热门文章

  1. 算法有偏见?总比人类识别强吧!
  2. 在真实工作中的编程是怎么样的,与学校里有什么不同?
  3. TED演讲:区块链将如何改变世界?看完太震撼了!
  4. mysql 查询空字符串 设置默认值_MySQL默认值选型是空,还是 NULL-爱可生
  5. 22届腾讯暑期实习三轮面试面经(已oc)
  6. 显卡mx150和230哪个好_建模渲染用专业图形显卡和游戏显卡哪个更好?
  7. html注释的爱情故事,爱情故事”为你的婚礼贴上专属标签
  8. linux 往文件写4k大小,[svc]为何linux ext4文件系统目录默认大小是4k?
  9. 三菱四节传送带控制梯形图_一文讲透FX5U PLC程序控制指令及步进梯形图编程
  10. [C++STL]常用排序算法