【BZOJ2337】XOR和路径(高斯消元)
大意
给出\(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和路径(高斯消元)的更多相关文章
- bzoj2337 XOR和路径——高斯消元
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2337 异或就一位一位考虑: x为到n的概率,解方程组即可: 考虑了n就各种蜜汁错误,所以索性 ...
- BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )
一位一位考虑异或结果, f(x)表示x->n异或值为1的概率, 列出式子然后高斯消元就行了 --------------------------------------------------- ...
- BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]
2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...
- BZOJ 2337 XOR和路径 | 高斯消元 期望 位运算
BZOJ 2337 XOR和路径 题解 这道题和游走那道题很像,但又不是完全相同. 因为异或,所以我们考虑拆位,分别考虑每一位: 设x[u]是从点u出发.到达点n时这一位异或和是1的概率. 对于所有这 ...
- BZOJ2337:[HNOI2011]XOR和路径(高斯消元)
Description 给定一个无向连通图,其节点编号为 1 到 N,其边的权值为非负整数.试求出一条从 1 号节点到 N 号节点的路径,使得该路径上经过的边的权值的“XOR 和”最大.该路径可以重复 ...
- BZOJ2337: [HNOI2011]XOR和路径(高斯消元,期望)
解题思路: Xor的期望???怕你不是在逗我. 按为期望,新技能get 剩下的就是游走了. 代码: #include<cmath> #include<cstdio> #incl ...
- 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基
题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...
- HDU 3949 XOR ——线形基 高斯消元
[题目分析] 异或空间的K小值. 高斯消元和动态维护线形基两种方法都试了试. 动态维护更好些,也更快(QAQ,我要高斯消元有何用) 高斯消元可以用来开拓视野. 注意0和-1的情况 [代码] 高斯消元 ...
- HDU 3949 XOR [线性基|高斯消元]
目录 题目链接 题解 代码 题目链接 HDU 3949 XOR 题解 hdu3949XOR 搞死消元找到一组线性无关组 消出对角矩阵后 对于k二进制拆分 对于每列只有有一个1的,显然可以用k的二进制数 ...
随机推荐
- Swoole 协程简介
什么是协程 协程可以简单理解为线程,只不过这个线程是用户态的,不需要操作系统参与,创建.销毁和切换的成本都非常低. 协程不能利用多核 cpu,想利用多核 cpu 需要依赖 Swoole 的多进程模型. ...
- springboot集成oss阿里云存储
一.注册阿里云 二.购买OSS 三.创建桶 设定权限,其它默认即可 四.创建目录 点击桶名,进入创建目录即可. 五.开发文档 引入依赖: <dependency> <groupId& ...
- 获取iframe外的document
在iframe中点击弹出层外部分弹出层消失,但是点击iframe外部分就操作不了弹出层了,被这个问题困扰了不少时间,今天得以解决,代码如下: 说明:$(top.document,document).c ...
- testng 的常用注解
常用注解如下: @BeforeSuite: 此注解的方法会在当前测试集合中的任一测试用例前执行 @AfterSuite: 此注解的方法会在当前测试集合中的所有测试程序结束后执行 @BeforeTest ...
- 听说你想在 WordPress 网站上嵌入 PPT ?
年底了,想在 WordPress 博客上展示自己的春节旅行计划,尝试在文章中插入一个旅行计划 PPT 结果长这个样子 你有没有遇到同样的情况,懊恼网页支持展示的内容无法满足我们的需求: 想展示年度家庭 ...
- Java不限制从键盘输入一个数组
Java不限制从键盘输入一个数组 在写算法的时候,需要从键盘输入一个数组,一直不会,最近看了几篇博客学会了,下面用二分查找举例: package com.基础; import java.util.Sc ...
- linux 查看端口占用情况并关闭进程
首先要搞清楚 linux 查看进程和查看端口是两个概念,一般来讲进程会有多个,而固定端口只会有一个. 1.查看进程 ,通常在使用 ps 命令后 用管道连接(ps -ef|grep xxx ) 查 ...
- Git在实际生产中的使用
文章目录 Git在实际生产中的使用 简单情况下的代码提交 Fetch and Pull 仅获取某分支的代码 远程仓库已经合并了别人的代码 冲突产生原因与解决办法 不恰当的多个Commit合并为一个 G ...
- Java中的常用类——Arrays
数组工具类java.util.Arrays Arrays类中的方法都是static修饰的静态方法,因此可以直接使用类名.方法名来调用,而不用通过new使用对象来调用(是"不用"不是 ...
- 【刷题-LeetCode】199 Binary Tree Right Side View
Binary Tree Right Side View Given a binary tree, imagine yourself standing on the right side of it, ...