BZOJ 2337 XOR和路径

题解

这道题和游走那道题很像,但又不是完全相同。

因为异或,所以我们考虑拆位,分别考虑每一位;

设x[u]是从点u出发、到达点n时这一位异或和是1的概率。

对于所有这一位是1的边,若一个端点是u、另一个是v,则x[u] += (1 - x[v]) / deg[u],反之亦然;

对于这一位是0的边,x[u] += x[v] / deg[u],反之亦然。

然后得到好多方程,高斯消元即可。

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#define space putchar(' ')
#define enter putchar('\n')
using namespace std;
typedef long long ll;
template <class T>
void read(T &x){
char c;
bool op = 0;
while(c = getchar(), c < '0' || c > '9')
if(c == '-') op = 1;
x = c - '0';
while(c = getchar(), c >= '0' && c <= '9')
x = x * 10 + c - '0';
if(op) x = -x;
}
template <class T>
void write(T x){
if(x < 0) putchar('-'), x = -x;
if(x >= 10) write(x / 10);
putchar('0' + x % 10);
} const int N = 105, M = 10005;
int n, m, u[M], v[M], w[M], deg[N];
double f[N][N], ans;
void build(int p){
memset(f, 0, sizeof(f));
for(int i = 1; i < n; i++) f[i][i] = deg[i];
for(int e = 1; e <= m; e++){
if(w[e] & (1 << p)){
f[u[e]][v[e]] += 1, f[u[e]][n + 1] += 1;
if(u[e] != v[e]) f[v[e]][u[e]] += 1, f[v[e]][n + 1] += 1;
}
else{
f[u[e]][v[e]] += -1;
if(u[e] != v[e]) f[v[e]][u[e]] += -1;
}
}
for(int i = 1; i < n; i++) f[n][i] = 0;
f[n][n] = 1, f[n][n + 1] = 0;
}
void Gauss(){
for(int i = 1; i <= n; i++){
int l = i;
for(int j = i + 1; j <= n; j++)
if(fabs(f[j][i]) > fabs(f[l][i])) l = j;
if(i != l)
for(int j = i; j <= n + 1; j++)
swap(f[i][j], f[l][j]);
for(int j = n + 1; j >= i; j--)
f[i][j] /= f[i][i];
for(int j = i + 1; j <= n; j++)
for(int k = n + 1; k >= i; k--)
f[j][k] -= f[j][i] * f[i][k];
}
for(int i = n; i; i--)
for(int j = 1; j < i; j++)
f[j][n + 1] -= f[j][i] * f[i][n + 1];
}
int main(){
read(n), read(m);
for(int i = 1; i <= m; i++){
read(u[i]), read(v[i]), read(w[i]);
deg[u[i]]++;
if(u[i] != v[i]) deg[v[i]]++;
}
for(int i = 0; i < 31; i++){
build(i);
Gauss();
ans += f[1][n + 1] * (1 << i);
}
printf("%.3lf\n", ans);
return 0;
}

BZOJ 2337 XOR和路径 | 高斯消元 期望 位运算的更多相关文章

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

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

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

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

  3. 【BZOJ2337】XOR和路径(高斯消元)

    题目链接 大意 给出\(N\)个点,\(M\)条边的一张图,其中每条边都有一个非负整数边权. 一个人从1号点出发,在与该点相连的边中等概率的选择一条游走,直到走到\(N\)号点. 问:将这条路径上的边 ...

  4. BZOJ 3143 HNOI2013 游走 高斯消元 期望

    这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...

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

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

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

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

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

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

  8. [BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash)

    [BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash) 题面 扔很多次硬币后,用H表示正面朝上,用T表示反面朝上,会得到一个硬币序列.比如HTT表示第一次正面朝上, ...

  9. HDU2262;Where is the canteen(高斯消元+期望)

    传送门 题意 给出一张图,LL从一个点等概率走到上下左右位置,询问LL从宿舍走到餐厅的步数期望 分析 该题是一道高斯消元+期望的题目 难点在于构造矩阵,我们发现以下结论 设某点走到餐厅的期望为Ek 1 ...

随机推荐

  1. PSO算法的改进(参数)

    ## 基本PSO的改进 虽然粒子群在求解优化函数时,表现了较好的寻优能力:通过迭代寻优计算,能够迅速找到近似解:但基本的PSO容易陷入局部最优,导致结果误差较大. 两个方面:1.将各种先进理论引入到P ...

  2. oracle数据库数据字典应用

    oracle数据字典 数据字典是由oracle服务器创建和维护的一组只读的系统表.数据字典分为两类:一是基表,二是数据字典视图. 数据字典视图包括用户名.用户权限.对象名.约束和审计等信息,是通过运行 ...

  3. linux 安装配置zookeeper脚本

    #!/bin/bash # automatic install zookeeper echo "========= Start to install zookeeper ========== ...

  4. (xampp)lampp 下配置https(ssl)自签双向认证以后 apache无法启动解决方案

    自签CA一般是没有应用场景的,因为需要客户端浏览器导入证书才能访问 但是在某些需要内部使用的场景下,确实是一个解决方案 但是在lampp配置了双向认证以后发现 原来自带的管理命令 lampp star ...

  5. 查看linux端口对应的进程id

    例如:查看占用4040端口的进程 ss -lptn 'sport = :4040'

  6. python操作hive并且获取查询结果scheam

    执行hive -e 命令并且获取对应的select查询出来的值及其对应的scheam字段 需要在执行语句中前部添加 set hive.cli.print.header=true; 这个设置,如下语句: ...

  7. css 文字展示两行 其余的省略号显示

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. OO学习第二阶段总结

    面向对象课程的第二个阶段结束了,作业们由简单的玩具模式步入到复杂的多线程地狱模式,由之前的算法简单实现有坑转变成算法复杂实现有很大的坑.一个最重要的心得就是一定要在动手敲代码实现之前对整个程序的实现做 ...

  9. 校友聊NABCD需求分析

    校友聊 NABCD需求分析 N:内网用户流量不够使用 A:基于局域网进行通讯 B:通讯不花费外网流量 C:目前学校还没有使用 D:将软件放在校园网,可以下载使用

  10. Task 6.4 冲刺Two之站立会议4

    今天对主界面部分的代码进行了完善,因为主界面有对于用户账号的设置.包括头像修改.增删好友.进入聊天界面等功能,包含的内容很多.我主要是负责跟聊天界面的连接以及账号设置的部分:遇到的问题有,因为这部分依 ...