题目链接

大意

给出\(N\)个点,\(M\)条边的一张图,其中每条边都有一个非负整数边权。

一个人从1号点出发,在与该点相连的边中等概率的选择一条游走,直到走到\(N\)号点。

问:将这条路径上的边权异或起来的期望值为多少。

(图中可能有重边与自环)

思路

对于异或,我们考虑逐位解决,这样之后,边权只有0/1。

我们设\(Dp[u]\)表示从\(u\)到\(N\)路径的期望异或值为1时的概率。

那么对于除了\(N\)号点的每个点,我们将它相连的按边权边分为两类。

我们设边权为0的边相连的点为\(v0\),边权为1的边相连的点为\(v1\),

那么我们应该有\(Dp[u]=\sum \frac{Dp[v1]}{size}+\sum \frac{1-Dp[v2]}{size}\)

化一下简得到:\(Dp[u]-\sum \frac{Dp[v1]}{size}+\sum \frac{Dp[v2]}{size}=\frac{siz[v2]}{size}\),

即\(Dp[u]\cdot size-\sum{Dp[v1]}+\sum{Dp[v2]}=siz[v2]\)

这样的方程共有\(N-1\)个(除开\(N\)号点)。

而左边共有为(\(N-1\))个未知数(\(Dp[N]=0\))。

特殊的,对于\(N\)号点,我们需要特殊开一个方程:\(Dp[N]=0\).

这样,我们就可以用高斯消元来解决了。

而最终所求就是各个位时的相关贡献,总复杂度为\(O(N^3logV)\)。

代码

#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
#define LD long double
const int MAXN=105;
int N,M;
LD Ans0;
LD Ans[MAXN];
LD A[MAXN][MAXN];
vector<int>P[MAXN],T[MAXN];
LD Abs(LD X){return X<0?-X:X;}
void GX(){
for(int j=1;j<=N;j++){
int Mx=j;
for(int i=j+1;i<=N;i++)
if(Abs(A[i][j])>Abs(A[Mx][j]))
Mx=i;
swap(A[Mx],A[j]);
for(int i=1;i<=N;i++){
if(i==j)continue;
LD tmp=A[i][j]/A[j][j];
A[i][j]=0;
for(int k=j+1;k<=N+1;k++)
A[i][k]-=A[j][k]*tmp;
}
}
for(int i=1;i<=N;i++)
Ans[i]=A[i][N+1]/A[i][i];
}
int main(){
scanf("%d%d",&N,&M);
for(int i=1,x,y,z;i<=M;i++){
scanf("%d%d%d",&x,&y,&z);
P[x].push_back(y);
T[x].push_back(z);
if(x==y)continue;//自环.
P[y].push_back(x);
T[y].push_back(z);
}
for(int k=0;k<=30;k++){
for(int i=1;i<N;i++){
int size=P[i].size();
for(int j=0;j<size;j++){
int v=P[i][j];
int val=(T[i][j]&(1<<k));
if(val)A[i][v]+=1,A[i][N+1]+=1;
else A[i][v]-=1;
}
A[i][i]+=size;
}
A[N][N]=1.0;GX();
Ans0+=(1<<k)*Ans[1];
memset(A,0,sizeof(A));
}
printf("%.3Lf\n",Ans0);
}
/*
2 2
1 1 2
1 2 3 */

【BZOJ2337】XOR和路径(高斯消元)的更多相关文章

  1. bzoj2337 XOR和路径——高斯消元

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2337 异或就一位一位考虑: x为到n的概率,解方程组即可: 考虑了n就各种蜜汁错误,所以索性 ...

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

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

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

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

  4. BZOJ 2337 XOR和路径 | 高斯消元 期望 位运算

    BZOJ 2337 XOR和路径 题解 这道题和游走那道题很像,但又不是完全相同. 因为异或,所以我们考虑拆位,分别考虑每一位: 设x[u]是从点u出发.到达点n时这一位异或和是1的概率. 对于所有这 ...

  5. BZOJ2337:[HNOI2011]XOR和路径(高斯消元)

    Description 给定一个无向连通图,其节点编号为 1 到 N,其边的权值为非负整数.试求出一条从 1 号节点到 N 号节点的路径,使得该路径上经过的边的权值的“XOR 和”最大.该路径可以重复 ...

  6. BZOJ2337: [HNOI2011]XOR和路径(高斯消元,期望)

    解题思路: Xor的期望???怕你不是在逗我. 按为期望,新技能get 剩下的就是游走了. 代码: #include<cmath> #include<cstdio> #incl ...

  7. 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基

    题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...

  8. HDU 3949 XOR ——线形基 高斯消元

    [题目分析] 异或空间的K小值. 高斯消元和动态维护线形基两种方法都试了试. 动态维护更好些,也更快(QAQ,我要高斯消元有何用) 高斯消元可以用来开拓视野. 注意0和-1的情况 [代码] 高斯消元 ...

  9. HDU 3949 XOR [线性基|高斯消元]

    目录 题目链接 题解 代码 题目链接 HDU 3949 XOR 题解 hdu3949XOR 搞死消元找到一组线性无关组 消出对角矩阵后 对于k二进制拆分 对于每列只有有一个1的,显然可以用k的二进制数 ...

随机推荐

  1. zabbix5.0监控安全配置全过程

    第一部分,安装 此安装配置为yum方式安装zabbix5.0 系统版本:CentOS Linux release 7.5.1804 (Core) zabbix版本:rpm -qa | grep zab ...

  2. ShardingJDBC

    ShardingJDBC的核心流程主要分成六个步骤,分别是:SQL解析->SQL优化->SQL路由->SQL改写->SQL执行->结果归并,流程图如下: sharding ...

  3. Web发送邮件

    1.首先注册一个163邮箱 自己的邮箱地址是xyqq769552629@163.com 登陆的密码是自己设定 使用邮箱发邮件,邮件必须开启pop和smtp服务,登陆邮件 开启SMTP服务,这个时候提示 ...

  4. vue 快速入门 系列 —— 模板

    其他章节请看: vue 快速入门 系列 模板 前面提到 vue 中的虚拟 dom 主要做两件事: 提供与真实节点对应的 vNode 新旧 vNode 对比,寻找差异,然后更新视图 ①.vNode 从何 ...

  5. Solon 开发,七、自定义注解开发汇总

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  6. Solon 开发,八、注入依赖与初始化

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  7. 通过Javascript实现把数组里的内容以表格方式呈现到页面从

    一.把数组里的内容呈现到页面从,以表格方式 <!doctype html> <html> <head> <meta charset="utf-8&q ...

  8. cesium 3dtiles模型单体化点击高亮效果

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. c ...

  9. 关于BIO NIO和AIO的理解

    转载自 :http://blog.csdn.net/anxpp/article/details/51512200 1.BIO编程 1.1.传统的BIO编程 网络编程的基本模型是C/S模型,即两个进程间 ...

  10. DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ | NEURAL NETWORKS

    神经网络可以使用 torch.nn包构建. 现在你已经对autograd有所了解,nn依赖 autograd 定义模型并对其求微分.nn.Module 包括层,和一个返回 output 的方法 - f ...