首先,我们发现,因为是无向图,所以相连的点之间是有“依赖性”的,所以不能直接用dp求解。

因为是xor,所以按位处理,于是列线性方程组,设$ x[i] $为点i到n异或和为1的期望,因为从1到n和从n到1一样,所以选择倒着推,即,

if(deg[e[i].va]==0)

\[x[u]=\sum_{v}^{v\subset son(u)}\frac{x[v]}{deg[i]}
\]

else

\[x[u]=\sum_{v}^{v\subset son(u)}\frac{1-x[v]}{deg[i]}
\]

列n元n次方程组高斯消元求解即可

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=105,M=100005;
int n,m,h[N],cnt,in[N];
double f[N][N],ans;
struct qwe
{
int ne,to,va;
}e[M<<1];
void add(int u,int v,int w)
{
cnt++;
in[u]++;
e[cnt].ne=h[u];
e[cnt].to=v;
e[cnt].va=w;
h[u]=cnt;
}
void gaosi()
{
for(int i=1;i<=n;i++)
{
int id=i;
double mx=0.0;
for(int j=i;j<=n;j++)
if(fabs(f[j][i])>mx)
id=j,mx=fabs(f[j][i]);
if(id!=i)
for(int j=1;j<=n+1;j++)
swap(f[id][j],f[i][j]);
double t=f[i][i];
for(int j=1;j<=n+1;j++)
f[i][j]/=t;
for(int j=1;j<=n;j++)
if(j!=i)
{
double t=f[j][i];
for(int k=1;k<=n+1;k++)
f[j][k]-=t*f[i][k];
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=1,x,y,z;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
if (x!=y)
add(y,x,z);
}
for(int i=0;i<=30;i++)
{
memset(f,0,sizeof(f));
for(int u=1;u<=n-1;u++)
{
f[u][u]=1.0;
for(int j=h[u];j;j=e[j].ne)
{
if(e[j].va&(1<<i))
f[u][e[j].to]+=1.0/in[u],f[u][n+1]+=1.0/in[u];
else
f[u][e[j].to]-=1.0/in[u];
}
}
f[n][n]=1.0;
gaosi();
ans+=(f[1][n+1])*(1<<i);
}
printf("%.3lf\n",ans);
return 0;
}

bzoj 2337 [HNOI2011]XOR和路径【高斯消元+dp】的更多相关文章

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

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

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

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

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

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

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

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

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

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

  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. excludepathpatterns 无效

    踩坑了,调了好久才调出来. 原因:  访问的API /XXX 已经转换为 /error 了.  把“/error” 也加入 excludepathpatterns 里面即可.

  2. nginx 安装过程中的not found

    linux 发行版本:centos zlib not found openssl not found yum install zlib-devel yum install openssl-devel

  3. A. Link/Cut Tree--cf614A ()

    这个题卡精度了  刚开始是2的57次方都已经有误差了  不知道怎么弄 后来加个求余就好了 #include<stdio.h> #include<math.h> #include ...

  4. POJ 1860【求解是否存在权值为正的环 屌丝做的第一道权值需要计算的题 想喊一声SPFA万岁】

    题意: 有n种钱币,m个钱币兑换点,小明一开始有第n种钱币数量为w. 每个兑换点可以将两种不同的钱币相互兑换,但是兑换前要先收取一定的费用,然后按照比例兑换. 问小明是否可以经过一系列的兑换之后能够将 ...

  5. maven之发布项目到nexus【clean deploy命令】

    原文:http://m.blog.csdn.net/article/details?id=49667971 当我们的项目开发完成以后,可能要进行发布(如果是独立的项目,就不需要发布啦,如果是模块项目, ...

  6. Meteor部

    一个关于 Meteor 主要事项就是如何轻松部署应用程序.当程序完成后,有一个简单的方法来和世界分享你的应用程序.所有需要做的就是在运行命令提示符窗口下面的代码. C:\Users\Administr ...

  7. Linux下获取线程TID的方法

    如何获取进程的PID(process ID)? 可以使用: #include <unistd.h> pid_t getpid(void); 通过查看头文件说明,可以得到更详细的信息: fi ...

  8. 嵌入式开发之davinci--- 8148 小站信息

    http://zhan.renren.com/tag?value=dm8148#!//more/3602888498051423017 http://zhan.renren.com/dm8148evm ...

  9. Ubuntu x86 64 settup nginx rtmp server

    常常搭建nginxserver,可是好像每次的情况都不同,这次具体记录这个过程: 平台:unbutu 10.04 内核:2.6.32-33-generic 1, 编译环境搭建. sudo apt-ge ...

  10. HDU1251 统计难题 【trie树】

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Subm ...