题链:

http://www.lydsy.com/JudgeOnline/problem.php?id=2337
题解:

概率dp,
因为异或的每一位之间没有关系,我们就依次考虑每一位k。(即边权要么为1,要么为0)
令dp[i]表示从i出发到n点的边权异或和为1的概率。
然后转移:(令cnt[i]表示i的度)
$$dp[i]=\sum_{i->j,边权为0}\frac{dp[j]}{cnt[i]}+\sum_{i->j,边权为1}\frac{1-dp[j]}{cnt[i]}$$
$$dp[N]=0$$
然后可以列出这样N个式子,是一个循环dp,可以用高斯消元解出每个dp值。

所以这一位k期望的贡献就是(dp[1]*1)<<(k-1)

(正推不太好做,因为1-f[i]不仅包含了从1到i的异或值为0的概率,还包括了从1不到i的概率。)

(如果不太能理解上面那句话,可以看看我的这篇博客关于正反向进行期望DP的一点探究(有一丢丢长))

代码:

#include<bits/stdc++.h>
#define MAXN 105
#define MAXM 10005
using namespace std;
const double eps=1e-8;
double ANS,a[MAXN][MAXN],dp[MAXN];
double *A[MAXN];
int N,M,Ant;
int cnt[MAXN];
struct Edge{
int ent;
int to[MAXM*2],val[MAXM*2],nxt[MAXM*2],head[MAXN];
Edge():ent(2){}
void Adde(int u,int v,int w){
to[ent]=v; val[ent]=w; nxt[ent]=head[u]; head[u]=ent++;
}
}E;
int dcmp(double x){
if(fabs(x)<eps) return 0;
else return x>0?1:-1;
}
void buildequation(int p){
for(int i=1;i<=N;i++){
for(int j=1;j<=N+1;j++) a[i][j]=0;
if(i==N){a[i][i]=1; continue;}
a[i][i]=cnt[i];
for(int j=E.head[i];j;j=E.nxt[j]){
int v=E.to[j];
if(E.val[j]&(1<<p)) a[i][v]+=1,a[i][N+1]+=1;
else a[i][v]-=1;
}
}
for(int i=1;i<=N;i++) A[i]=a[i];
}
void Gausselimination(int pos,int i){
if(pos==N+1||i==N+1) return; dp[i]=0;
for(int j=pos;j<=N;j++) if(dcmp(A[j][i])!=0){
swap(A[pos],A[j]); break;
}
if(dcmp(A[pos][i])!=0)
for(int j=pos+1;j<=N;j++){
double k=A[j][i]/A[pos][i];
for(int l=i;l<=N+1;l++)
A[j][l]-=k*A[pos][l];
}
Gausselimination(pos+(dcmp(A[pos][i]!=0)),i+1);
if(dcmp(A[pos][i])!=0){
for(int l=i+1;l<=N;l++)
dp[i]+=A[pos][l]*dp[l];
dp[i]=A[pos][N+1]-dp[i];
dp[i]=dp[i]/A[pos][i];
}
}
int main(){
ios::sync_with_stdio(0);
cin>>N>>M;
for(int i=1,u,v,w;i<=M;i++){
cin>>u>>v>>w;
E.Adde(u,v,w); cnt[u]++;
if(v!=u) E.Adde(v,u,w),cnt[v]++;
}
for(int i=30;i>=0;i--){
buildequation(i);
Gausselimination(1,1);
ANS=ANS*2+dp[1];
}
cout<<fixed<<setprecision(3)<<ANS<<endl;
return 0;
}

  

●BZOJ 2337 [HNOI2011]XOR和路径的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. 【BZOJ 2337】 2337: [HNOI2011]XOR和路径(概率DP、高斯消元)

    2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1170  Solved: 683 Description ...

  8. 【BZOJ】2337: [HNOI2011]XOR和路径 期望+高斯消元

    [题意]给定n个点m条边的带边权无向连通图(有重边和自环),在每个点随机向周围走一步,求1到n的期望路径异或值.n<=100,wi<=10^9. [算法]期望+高斯消元 [题解]首先异或不 ...

  9. 2337:[HNOI2011]XOR和路径 - BZOJ

    昨天才做了一道高斯消元,一下要精度判断,一下又不要精度判断 主要是思路很重要 很容易想到每一个二进制位算一个概率,然后求和,设f[i]为走到从i走到n这一个二进制位为1的概率 f[i]:=∑{f[j] ...

随机推荐

  1. Beta冲刺计划---Day0

    Beta阶段报告---Day0 1.需要改进完善的功能   我们上一阶段开发由于开发时间匆忙,对于爬虫耗时的优化没有考虑.优化的空间我在Alpha阶段的总结报告里说过,具体看下图.   这张图显示出爱 ...

  2. 团队作业4——第一次项目冲刺(Alpha版本)2017.11.19

    第三次会议:2017-11-16 第二次会议讨论的还没有完全实现,于是在第三次会议上对此进行了一些对我们工作上的看法,得出结论:多花时间啊!!!! 又没照照片图: 会议主要内容: 1.登录注册完善 2 ...

  3. 201621123068 《Java程序设计》第1周学习总结

    1. 本周学习总结 本周学习了如何使用Java来编写程序,还没展开学习具体的语言,但是也花了大量的时间搞清楚Java运行的原理.明白了Java是一种可以跨平台运行语言,搞清了jdk,jre,jvm之间 ...

  4. node创建第一个应用

    如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi. 从这个角度看,整个"接收 HTTP 请求并提供 ...

  5. php的格式化数字函数

    php格式化数字:位数不足前面加0补足 php格式化数字:位数不足前面加0补足 感谢:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/12 ...

  6. 源码解析Flask的配置文件

    在flask里,我们常在主文件中定义某些配置,比如: app.debug = True app.secret_key = 'helloworld!!' 实际上,flask中默认可以进行可选的配置项有很 ...

  7. Mego(04) - Mego入门

    本教程演示创建一个简单的数据库访问及更新数据的示例以便于初步了解下Mego框架的使用. 文中使用Visual Studio 2017版本. 创建Visual Studio项目 创建一个名为 MegoS ...

  8. Mego(08) - 高级建模

    对于模型建立Mego还提供了一些高级主题 数据库函数映射 我们可以将现有的CLR方法映射到指定数据库的标题函数上,如下所示 public class OrderManageEntities : DbC ...

  9. AssemblyExecuteAdapter

    BizTalk custom adapter AssemblyExecuteAdapter 功能 更为方便的扩展BizTalk custom adapter 的交互方式,只需要实现IAssemblyE ...

  10. idea中使用svn,忽略本地修改的指定的文件

    1.打开version control 2.可以查看目前忽略的文件 3.配置要忽略的文件 4.可以用通配符忽略匹配的文件 还有第二种方法,那就是: 在svn提交的界面,如果是没有加入到version- ...