●BZOJ 2337 [HNOI2011]XOR和路径
题链:
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和路径的更多相关文章
- 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径
2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 682 Solved: 384[Submit][Stat ...
- BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )
一位一位考虑异或结果, f(x)表示x->n异或值为1的概率, 列出式子然后高斯消元就行了 --------------------------------------------------- ...
- BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]
2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...
- bzoj 2337: [HNOI2011]XOR和路径
Description Input Output Sample Input Sample Output HINT Source Day2 终于把这个史前遗留的坑给填了... 首先异或的话由位无关性,可 ...
- bzoj 2337 [HNOI2011]XOR和路径【高斯消元+dp】
首先,我们发现,因为是无向图,所以相连的点之间是有"依赖性"的,所以不能直接用dp求解. 因为是xor,所以按位处理,于是列线性方程组,设$ x[i] $为点i到n异或和为1的期望 ...
- BZOJ 2337 [HNOI2011]XOR和路径 ——期望DP
首先可以各位分开求和 定义$f(i)$表示从i到n的期望值,然后经过一些常识,发现$f(n)=1$的时候的转移,然后直接转移,也可以找到$f(n)=0$的转移. 然后高斯消元31次就可以了. #inc ...
- 【BZOJ 2337】 2337: [HNOI2011]XOR和路径(概率DP、高斯消元)
2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1170 Solved: 683 Description ...
- 【BZOJ】2337: [HNOI2011]XOR和路径 期望+高斯消元
[题意]给定n个点m条边的带边权无向连通图(有重边和自环),在每个点随机向周围走一步,求1到n的期望路径异或值.n<=100,wi<=10^9. [算法]期望+高斯消元 [题解]首先异或不 ...
- 2337:[HNOI2011]XOR和路径 - BZOJ
昨天才做了一道高斯消元,一下要精度判断,一下又不要精度判断 主要是思路很重要 很容易想到每一个二进制位算一个概率,然后求和,设f[i]为走到从i走到n这一个二进制位为1的概率 f[i]:=∑{f[j] ...
随机推荐
- C语言第四次博客作业
一.PTA实验作业 题目1.梅森数 1.本题PTA提交列表(要提交列表,不是结果) 2. 设计思路(此处用流程图最好) 1.定义三个变量n,num,count,且初始化count为1 2.读取一个数n ...
- 从0开始的LeetCode生活—9. Palindrome Number(回文数)
题目大意: 判断输入的数字是不是回文数.所谓回文数就是正反读都一样的数字,比如说11,121,1221这样子的数字.负数不会是回文数. 解题思路: 思路一:如果这个数是负数,则返回false,否则用一 ...
- 在Apache中运行Python WSGI应用
我们介绍如何使用Apache模块mod_wsgi来运行Python WSGI应用. 安装mod_wsgi 我们假设你已经有了Apache和Python环境,在Linux或者Mac上,那第一步自然是安装 ...
- js的 == 和 ===的区别
1.对于string,number等基础类型,==和===是有区别的 不同类型间比较,==之比较转化成同一类型后的值看值是否相等,===如果类型不同,其结果就是不等,同类型比较,直接进行"值 ...
- 洛谷 U10783 名字被和谐了
https://www.luogu.org/problem/show?pid=U10783 题目背景 众所周知,我们称g是a的约数,当且仅当g是正数且a mod g = 0. 众所周知,若g既是a的约 ...
- Windows Server2012 故障转移集群之动态仲裁(Dynamic Quorum)
本篇文章主要介绍Windows2012的故障转移集群一个新功能“动态仲裁”,默认该功能是开启的: 动态仲裁能在当前群集投票出现分歧的情况下取消某些节点的投票权限,比如偶数个节点的群集环境.仲裁见证和动 ...
- Centos7安装openvpn及客户端配置
1.openvpn介绍 VPN直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,使用OpenSSL加密库中的SSLv3/TLSv1协议函数库. 目前OpenVPN能在Sola ...
- BizTalk 2016 配置 RosettaNet遇到的坑
本文只针对已经安装好BizTalk 2016 需要在安装RosettaNet加速器的伙伴. IIS配置 权限问题 错误信息 Failed to get IIS metabase property. E ...
- python运算符重载(二)
一.基础知识 定义:当类中提供了某个特殊名称的方法,在该类的实例出现在它们相关的表达式时,Python自动调用它们 特性: 1.运算符重载让类拦截常规的Python运算. 2.类可重载所有Python ...
- POJ-1679 The Unique MST---判断最小生成树是否唯一
题目链接: https://vjudge.net/problem/POJ-1679 题目大意: 给定一个无向连通网,判断最小生成树是否唯一. 思路: (1)对图中的每条边,扫描其他边,如果存在相同权值 ...