思路

看到异或,容易联想到二进制位之间是相互独立的,所以可以把问题变成每个二进制位为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

另外自环不能加两次

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define double long double
using namespace std;
const double eps = 1e-9;
int n,m,u[20100],v[20100],w[20100],fir[110],nxt[20100],cnt,d[110];
double a[110][110],ans;
void addedge(int ui,int vi,int wi){
++cnt;
u[cnt]=ui;
v[cnt]=vi;
w[cnt]=wi;
nxt[cnt]=fir[ui];
fir[ui]=cnt;
}
double gauss(void){
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
if(fabs(a[j][i])>eps){
for(int k=1;k<=n+1;k++)
swap(a[i][k],a[j][k]);
// break;
}
}
for(int j=1;j<=n;j++){
if(i==j)
continue;
double rates=a[j][i]/a[i][i];
for(int k=i;k<=n+1;k++)
a[j][k]=a[j][k]-rates*a[i][k];
}
}
return a[1][n+1]/a[1][1];
}
void make(int pos){
memset(a,0,sizeof(a));
a[n][n]=1;
for(int i=1;i<=n-1;i++){
a[i][i]+=d[i];
for(int j=fir[i];j;j=nxt[j]){
if((w[j]>>pos)&1){
a[i][v[j]]+=1;
a[i][n+1]+=1;
}
else{
a[i][v[j]]-=1;
}
}
}
double mid=gauss();
// printf("mid=%lf\n",mid);
ans=(ans+(1<<pos)*mid);
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
addedge(a,b,c),d[a]++;
if(a!=b)
addedge(b,a,c),d[b]++;
}
for(int i=0;i<32;i++){
make(i);
}
printf("%.3Lf\n",ans);
return 0;
}

最新文章

  1. xss其他标签下的js用法总结大全
  2. C#~异步编程再续~await与async引起的w3wp.exe崩溃
  3. Redis中的客户端redis-cli 命令总结
  4. Atom 如何隐藏 .Ds_Store 文件
  5. 脚本工具: 查看当前系统被写入的FD
  6. Linux内核分析之扒开系统调用的三层皮(下)
  7. JavaWeb chapter 8 过滤器
  8. ios 开发之 Xcode6 No valid signing identities (i.e. certificate and private key pair) matching...
  9. RequireJS加载ArcGIS API for JavaScript
  10. Centos环境下部署游戏服务器-权限
  11. init: sys_prop: permission denied uid:1003 name:service.bootanim.exit
  12. Computer Vision Algorithm Implementations
  13. centos7.0 php-fpm 安装ImageMagic php扩展imagick
  14. SO_REUSEADDR 套接字选项应用
  15. Nodejs+Grunt配置SASS项目自动编译
  16. python 内存数据库与远程服务
  17. Spark Streaming + Flume整合官网文档阅读及运行示例
  18. jq监听input-val变化事件
  19. 一起学Android之ListView
  20. Linux三剑客之awk命令

热门文章

  1. Day10 Python网络编程 Socket编程
  2. hdu2295DLX重复覆盖+二分
  3. 解释器模式 Interpreter
  4. GridFS Example
  5. javamail邮件Multipart支持同时发text和html混合消息,alternative纯文本与超文本共存
  6. 51Nod 1256 乘法逆元
  7. Java的类的详解
  8. 在linux系统中安装redis
  9. 设置PhoenixOS进入图形界面
  10. 20165310 NstSec2019 Week3 Exp1 逆向与Bof基础