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

------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
 
using namespace std;
 
typedef long double ld;
#define b(i) (1 << (i))
 
const int maxn = 109;
 
ld mat[maxn][maxn];
int N, deg[maxn];
 
struct edge {
int to, w;
edge* next;
} E[20009], *pt = E, *head[maxn];
 
void AddEdge(int u, int v, int w) {
deg[pt->to = v]++; pt->w = w; pt->next = head[u]; head[u] = pt++;
}
 
void Init() {
memset(deg, 0, sizeof deg);
int m;
scanf("%d%d", &N, &m); N--;
for(int i = 0; i < m; i++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
u--; v--;
AddEdge(u, v, w);
if(u != v) AddEdge(v, u, w);
}
}
 
void Work() {
for(int i = 0; i < N; i++) {
int r = i;
for(int j = i; ++j < N; )
if(fabs(mat[j][i]) > fabs(mat[r][i])) r = j;
if(r != i) {
for(int j = 0; j <= N; j++)
swap(mat[i][j], mat[r][j]);
}
for(int j = i; ++j < N; ) {
ld t = mat[j][i] / mat[i][i];
for(int k = i; k <= N; k++)
mat[j][k] -= t * mat[i][k];
}
}
for(int i = N; i--; ) {
for(int j = i; ++j < N; ) 
mat[i][N] -= mat[i][j] * mat[j][N];
mat[i][N] /= mat[i][i];
}
}
 
int main() {
Init();
ld ans = 0;
for(int i = 0; i < 30; i++) {
memset(mat, 0, sizeof mat);
for(int j = 0; j < N; j++) {
for(edge* e = head[j]; e; e = e->next) if(e->to != N) {
if(e->w & b(i))
mat[j][e->to]--, mat[j][N]--;
else
mat[j][e->to]++;
} else if(e->w & b(i))
mat[j][N]--;
mat[j][j] -= deg[j];
}
Work();
ans += mat[0][N] * b(i);
}
printf("%.3lf\n", (double) ans);
return 0;
}

------------------------------------------------------------------

2337: [HNOI2011]XOR和路径

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 699  Solved: 390
[Submit][Status][Discuss]

Description

Input

Output

Sample Input

Sample Output

HINT

Source

BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )的更多相关文章

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

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

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

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

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

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

  4. 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径

    2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 682  Solved: 384[Submit][Stat ...

  5. bzoj 2337 [HNOI2011]XOR和路径【高斯消元+dp】

    首先,我们发现,因为是无向图,所以相连的点之间是有"依赖性"的,所以不能直接用dp求解. 因为是xor,所以按位处理,于是列线性方程组,设$ x[i] $为点i到n异或和为1的期望 ...

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

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

  7. bzoj 2337: [HNOI2011]XOR和路径

    Description Input Output Sample Input Sample Output HINT Source Day2 终于把这个史前遗留的坑给填了... 首先异或的话由位无关性,可 ...

  8. ●BZOJ 2337 [HNOI2011]XOR和路径

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2337题解: 概率dp, 因为异或的每一位之间没有关系,我们就依次考虑每一位k.(即边权要么为 ...

  9. BZOJ 2337 [HNOI2011]XOR和路径 ——期望DP

    首先可以各位分开求和 定义$f(i)$表示从i到n的期望值,然后经过一些常识,发现$f(n)=1$的时候的转移,然后直接转移,也可以找到$f(n)=0$的转移. 然后高斯消元31次就可以了. #inc ...

随机推荐

  1. 继承ViewGroup研究(汇总) 一、二、三

    转载过来:为一.二.三版本. 仅供参考: 继承ViewGroup研究(1) --简介和一个小Demo 又翻开一个新篇章了,哈哈,上一回学习的是继承View,关于继承View个人感觉不是那么完美,做技术 ...

  2. Oracle Spatial-元数据及SDO_GEOMETRY

    一.空间表的元数据 将表的SDO_GEOMETRY列的所有对象作为一个空间层.Spatial需要对所有空间对象进行验证.创建索引和查询.此时需要为图层指定适当的元数据,该数据包含如下信息:维度.维度边 ...

  3. C++中实现链表的删除和颠倒

    MFC工程中关于链表的操作 1.对于给定的整数n,编写算法删除链表中第n个节点,该链表的第一个节点由first指向. 由于C++中没有关于node的标准头文件,要先手动定义node类,此处只定义了简单 ...

  4. OpenGL中glRotatef()函数究竟对矩阵做了什么

    OpenGL中glRotatef()函数究竟对矩阵做了什么 我们知道OpenGL中维持着两套矩阵,一个是模型视图矩阵(model view matrix),另一个是投影矩阵(projection ma ...

  5. npm 常用命令

    npm install xxx 安装模块npm install xxx@1.1.1   安装1.1.1版本的xxxnpm install xxx -g 将模块安装到全局环境中.npm ls 查看安装的 ...

  6. C++_auto

    自动变量,自动获取类型,输出,泛型 自动变量,可以实现自动循环一维数组 自动循环的时候,对应的必须是常量 //auto自动变量,自动匹配类型 #include <iostream> usi ...

  7. javascript if 与 if else 的一点小认识

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. iOS获取手机当前的网络状态

    获取iOS网络状态,目前有两个办法. 1.通过监听手机状态栏的信息. 2.通过使用官方提供的类Reachability. 一.通过手机监听手机状态栏的信息 好处: 1.可以通过苹果的审核上架AppSt ...

  9. HDoj-1228-A + B

    A + B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  10. 给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X

    题目:给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X 思路一: 1,先采用归并排序对这个数组排序, 2,然后寻找相邻<k,i>的两数之和sum,找到恰好sum>x的 ...