题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2337

首先:因为是异或和,所以可以考虑每一位考虑。

就在每一位上求一下该位是1的概率,乘以1<<k累加到答案里就行了。

可以用a[i]表示从 i 点走到 n 点的该位是1的概率。

  如果 i , j 有边,考虑 j 对 i 有什么影响,可以设定成正在从 i 往 j 走,最后走到n;

  那么,如果这条边是1,则 j 到 n 是0的概率可以累加到 i 到 n 是1的概率;如果边是0,则 j 到 n 是1的概率可以累加到 i 到 n 是1的概率。

  ( j 到 n 是0的概率就是(1-a[ j ]),(1-a[ j ])/ du[ j ] 拆一下就是在得数中减去1/du[ j ],a[ j ]的系数是-1/du[ j ])

而且 x[n] 应该赋初值0,才符合自己的定义。

看到很多题解好像和自己的正相反,符号、和 x[n] 的初值都是相反的,到底是怎么回事呢?

  (虽然不知道意义,但全反一下还是能求出正解吗……)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=,M=,lm=;
int n,m,head[N],xnt,du[N];
double f[N][N],a[N],ans;
struct Edge{
int next,to,w;
Edge(int n=,int t=,int w=):next(n),to(t),w(w) {}
}edge[M<<];
void init(int l)
{
memset(f,0.0,sizeof f);
for(int i=;i<n;i++)
{
f[i][i]=-;
for(int j=head[i];j;j=edge[j].next)//从i走到v
if(edge[j].w&l)
f[i][edge[j].to]-=1.0/du[i],f[i][n+]-=1.0/du[i];
else f[i][edge[j].to]+=1.0/du[i];
}
}
void gauss()
{
for(int i=;i<n;i++)
{
for(int j=n+;j>=i;j--)f[i][j]/=f[i][i];
for(int j=i+;j<n;j++)
for(int k=n+;k>=i;k--)
f[j][k]-=f[j][i]*f[i][k];
}
for(int i=n-;i;i--)
{
a[i]=f[i][n+];
for(int j=i-;j;j--)
f[j][n+]-=f[j][i]*a[i];
}
}
int main()
{
scanf("%d%d",&n,&m);int x,y,z;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
edge[++xnt]=Edge(head[x],y,z);head[x]=xnt;du[x]++;
if(x!=y)edge[++xnt]=Edge(head[y],x,z),head[y]=xnt,du[y]++;
}
for(int i=;i<lm;i++)
{
init(<<i);gauss();
ans+=(<<i)*a[];
}
printf("%.3lf",ans);
return ;
}

bzoj2337 XOR和路径的更多相关文章

  1. BZOJ-2337 XOR和路径(HNOI2011)概率DP+概率的线性叠加

    题意:给出n个点和m条边,每条边有权值wi,从1出发,每次等概率选一条出边走,直到终点n停止,得到的值是路径所有边的异或和.问异或和期望. 解法:这道题非常有意思!首先比较直观的想法就是dp[x]代表 ...

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

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

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

    [BZOJ2337]Xor和路径(高斯消元) 题面 BZOJ 题解 我应该多学点套路: 对于xor之类的位运算,要想到每一位拆开算贡献 所以,对于每一位拆开来看 好了,既然是按位来算 我们就只需要计算 ...

  4. 【BZOJ2337】[HNOI2011]XOR和路径 期望DP+高斯消元

    [BZOJ2337][HNOI2011]XOR和路径 Description 题解:异或的期望不好搞?我们考虑按位拆分一下. 我们设f[i]表示到达i后,还要走过的路径在当前位上的异或值得期望是多少( ...

  5. BZOJ2337: [HNOI2011]XOR和路径

    题解: 异或操作是每一位独立的,所以我们可以考虑每一位分开做. 假设当前正在处理第k位 那令f[i]表示从i到n 为1的概率.因为不是有向无环图(绿豆蛙的归宿),所以我们要用到高斯消元. 若有边i-& ...

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

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

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

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

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

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

  9. [HNOI2011]XOR和路径 && [HNOI2013]游走

    [HNOI2011]XOR和路径 题目大意 具体题目:戳我 题目: 给定一个n个点,m条边的有重边.有自环的无向图,其中每个边都有一个边权. 现在随机选择一条1到n的路径,路径权值为这条路径上所有边权 ...

随机推荐

  1. Ubuntu下的MongoDB GUI 可视化管理工具

    目录 1 Robo 3T 2 NoSQLBooster for MongoDB(收费) 3 JetBrains Plugin Repository :: Mongo Plugin Ubuntu下的Mo ...

  2. uboot 版本号生成过程

    uboot 版本号生成过程 uboot版本号貌似与实际开发不相关,但是我现在遇到一个bug与版本号关联密切. 这个bug与<uboot dm9000驱动故障>基本上是一样的,但是在上一篇博 ...

  3. 四种常见的 POST 提交数据方式 专题

    定义和用法 enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码.默认地,表单数据会编码为 "application/x-www-form-urlencoded". ...

  4. (转载)YOLO配置文件理解

    YOLO配置文件理解 转载自 [net] batch=64 每batch个样本更新一次参数. subdivisions=8 如果内存不够大,将batch分割为subdivisions个子batch,每 ...

  5. 自动生成makefile

    原文  http://www.laruence.com/2009/11/18/1154.html 作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实 ...

  6. Codeforces Round #396 (Div. 2) A,B,C,D,E

    A. Mahmoud and Longest Uncommon Subsequence time limit per test 2 seconds memory limit per test 256 ...

  7. 安装 android x86 到 virtual box

    由于vmware无论怎么整,声音都出不了. 改用virtual box了. 很多注意点都参照了这篇文章 http://www.android-x86.org/documents/virtualboxh ...

  8. bzoj2120: 数颜色 带修莫队

    墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P ...

  9. IOS-网络(文件上传)

    // // ViewController.m // IOS_0206_文件上传 // // Created by ma c on 16/2/6. // Copyright © 2016年 博文科技. ...

  10. LINUX 操作记录到syslog,并发送到syslog服务器上

    首先配置命令记录到syslog中: 在客户端的/etc/bashrc  下添加: logger -p local3.info  \"`who am i` ================== ...