题目链接

大意

给出\(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. JZOJ5405 & AtCoder Grand Contest 001 F. Permutation

    题目大意 给出一个长度为\(n\)的排列\(P\)与一个正整数\(k\). 你需要进行如下操作任意次, 使得排列\(P\)的字典序尽量小. 对于两个满足\(|i-j|>=k\) 且\(|P_i- ...

  2. oracle 之 cursor:创建存储过程批量执行DDL语句

    说明:使用此过程可任意执行批量DDL语句,调用DDL查询语句时,注意转义字符,使用 ' 转义! 需求:批量删除以CUR_TEST开头的表,且有日志记录. 环境准备:建几张以CUR_TEST开头测试表. ...

  3. 关于APP设计规范和一些图层命名

    首先,本人大学计算机专业出身,学过编程,工作的时候做过 产品经理,设计师,前端工程师,对工作的流程都有一些见解. 现在主攻前端工程师,做Web APP.今天收到设计师的设计稿,一看图层分类,这让我感觉 ...

  4. F5 BIG-IP 远程代码执行漏洞环境搭建

    最近F5设备里的远程代码执行漏洞可谓是火爆,漏洞评分10分,所以,我也想搭建下环境复现一下该漏洞 漏洞详情 F5 BIG-IP 是美国F5公司一款集成流量管理.DNS.出入站规则.web应用防火墙.w ...

  5. 对飞猪H5端API接口sign签名逆向实验

    免责声明 本文章所提到的技术仅用于学习用途,禁止使用本文章的任何技术进行发起网络攻击.非法利用等网络犯罪行为,一切信息禁止用于任何非法用途.若读者利用文章所提到的技术实施违法犯罪行为,其责任一概由读者 ...

  6. Keil MDK STM32系列(九) 基于HAL和FatFs的FAT格式SD卡TF卡读写

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  7. Linux 安装 MySQL 8.0.26 超详细图文步骤

    1.MySQL 8.0.26 下载 官方网站下载 MySQL 8.0.26 安装包,下载地址: https://downloads.mysql.com/archives/community/ 需要注意 ...

  8. RHCSA 第六天

    一.  创建下列用户.组和组成员资格: 1.创建名为 sysmgrs 的组 2.创建用户 natasha 同时指定sysmgrs作为natasha的附加组 3.创建用户 harry 同时指定 sysm ...

  9. JSON串、JSON对象、Java对象的相互转换2

    对象类型转换: 1.Java对象-->JSON对象2.Java对象-->JSON字符串 3.JSON对象-->JSON字符串 4.JSON对象-->Java对象 5.JSON字 ...

  10. 【记录一个问题】铁威马nas,噪音太大了,我老婆说在客厅放了一个电饭锅

    1.硬盘转动的噪音特别大,而且还是有很大IO的长时间猛转: 2.IO的管理算法,以及做IO的进程,都有很大问题.并未做任何操作,动不动就疯了一样硬盘猛转.