设 \(f(x)\) 表示从 \(x\) 节点走到 \(n\) 的期望。有 $$f(x)=\sum_{{x,y}}\frac{f(y)\oplus w(x,y)}{{\rm deg}(x)}$$ 由于有后效性,无法 DP 求得。于是可以将其看作未知数,\(n\) 个点构成 \(n\) 个 \(n\) 元一次方程,解方程即可。

但还是不太好求,考虑期望的线性性,按位处理。

重新记 \(f(x)\) 表示当前位的 \(x\) 走到 \(n\) 异或和为 \(1\) 的概率,有 $${\rm deg}(x)f(x)=\sum_{w(x,y)=1}f(y)+\sum_{w(x,y)=0}\big(1-f(y)\big)$$ 最后的答案为 \(\sum\limits_{t=1}^{32} 2^{t-1}\cdot f(1)\)。

为了消元简便,实际求的过程中我们把方程写成 $$\sum_{w(x,y)=0}f(y)-\sum_{w(x,y)=1}f(y)-{\rm deg}(x)f(x)=-\sum_{w(x,y)=1}1$$

注意自环只用算一次。

别颓废了……抓紧时间……

#include <bits/stdc++.h>
using namespace std; const int N=105,M=10005;
const double eps=1e-8;
struct Edge{int to,nxt,w;}e[M<<1];
int n,m,cnt,head[N],deg[N];
double ans,a[N][N]; inline void add(int u,int v,int w) {e[++cnt]=(Edge){v,head[u],w};head[u]=cnt;} void gauss()
{
for(int i=1;i<=n;++i)
{
int t=i;
for(int j=i+1;j<=n;++j)
if(fabs(a[j][i])>fabs(a[t][i])) t=j;
for(int j=i;j<=n+1;++j) swap(a[t][j],a[i][j]);
for(int j=n+1;j>=i;--j) a[i][j]/=a[i][i];
for(int j=1;j<=n;++j)
if(i!=j)
for(int k=n+1;k>=i;--k)
a[j][k]-=a[j][i]*a[i][k];
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=1,d,b,c;i<=m;++i)
{
scanf("%d%d%d",&d,&b,&c);
if(d==b)
{
deg[d]++; add(d,b,c);
}
else
{
deg[d]++,deg[b]++;
add(d,b,c); add(b,d,c);
}
}
for(int k=30;~k;--k)
{
memset(a,0,sizeof(a));
for(int u=1;u<n;++u)
{
a[u][u]=-deg[u];
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].to,w=(e[i].w>>k)&1;
if(w) a[u][v]-=1,a[u][n+1]-=1;
else a[u][v]+=1;
}
}
a[n][n]=1; gauss();
ans+=(1<<k)*a[1][n+1];
}
printf("%.3lf",ans);
return 0;
}

[HNOI2011]XOR和路径 题解的更多相关文章

  1. BZOJ2337:[HNOI2011]XOR和路径——题解

    +++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...

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

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

  3. BZOJ2337: [HNOI2011]XOR和路径

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

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

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

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

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

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

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

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

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

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

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

  9. [Wc2011] Xor 和 [HNOI2011]XOR和路径

    Xor F.A.Qs Home Discuss ProblemSet Status Ranklist Contest 入门OJ ModifyUser  autoint Logout 捐赠本站 Prob ...

随机推荐

  1. Mybatis映射文件中的参数传递

    一.接口中只有一个参数 1.参数是基本类型or基本类型的包装类or字符串类型 这种情况下映射文件中#{}里的内容可以是任意的,你可以使用#{xxx} 或 #{abc} .....因为此时#{}相当于一 ...

  2. QT Dialog模态与非模态

    模态 // 创建对话框窗口 TestDialog* dlg = new TestDialog(this); // 阻塞程序的运行 dlg->exec(); 这样的话,当运行对话窗口的时候,会阻塞 ...

  3. yum install php-bcmath-5.4.16-42.el7.x86_64.rpm安装报错

    [root@zabbixserver lnmp_soft]# yum install php-bcmath-5.4.16-42.el7.x86_64.rpm 已加载插件:langpacks, prod ...

  4. 三、使用sudo分配管理权限

    使用sudo分配管理权限 su命令 su -  [账户名称]     :切换到用户,不加用户名默认切换到root su -  [账户名称]  -c  '命令'   :以xx用户身份执行命令,注意命令需 ...

  5. GD32F330 | ADC实例 基于DMA方式

    GD32F330 | ADC实例 基于DMA方式 简单记录一下 ADC多通道转换 DMA搬运 的使用,以 GD32F330G8U6 为例: 一.ADC 基础知识 12位ADC是一种采用逐次逼近方式的模 ...

  6. 使用charles抓取https的方法

    自己整理的步骤做个记录 1.下载证书,官方地址:http://www.charlesproxy.com/ssl.zip 可直接点击链接下载:http://charlesproxy.com/getssl ...

  7. SpringCloud Alibaba实战(7:nacos注册中心管理微服务)

    源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在上一节我们已经完成了Nacos Server的本地部署,这一节我们学习如何将Nac ...

  8. 在Excel中当遇到多个对象的目标值都不同时,如何快速设置条件格式突出未达标的对象

    1.选择实际值的一个单元格,选择条件格式,新建规则,选择图中选项. 2.这里选择大于,然后选择对比的单元格.选择需要的格式确定.(因为要对比的目标值不同,所以需要给单元格去掉绝对引用,也就是$符号). ...

  9. python数字游戏

    import random a=random.randint(1,10) b=0 num=3 while num>0:    print("你还有"+str(num)+&qu ...

  10. Vue前端基础学习

    vue-cli vue-cli 官方提供的一个脚手架(预先定义好的目录结构及基础代码,咱们在创建Maven项目的时可以选择创建一个骨架项目,这个骨架项目就是脚手架),用于快速生成一个vue项目模板 主 ...