bzoj 2337: [HNOI2011]XOR和路径
Description

Input
Output
Sample Input
Sample Output
HINT
Source
终于把这个史前遗留的坑给填了。。。
首先异或的话由位无关性,可以按位处理。。。
那么对于每一位,设f[i]表示从i出发第一次到达n且xor和为1的概率,out[i]为i的出边,那么转移就比较容易了。。。
if(w(i,j)&xxx) f[i]+=(1-f[j)/out[i];// 这条边该位为1,需要xor上0,xor和才为1
else f[i]+=f[j]/out[i];//同上。。。
但是这个有环,而且可以走重边自环,肯定是不能dp的,
但是我们发现对于每个f[i]=f[j]/out[i]+(1-f[j']/out[i])...都是一个线性方程。。。所以这是一个线性方程组。。。
然后我们由已知f[n]=1,所以可以用高斯消元解决。。。很妙啊。。。
// MADE BY QT666
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=150;
const int M=200050;
int out[N];
int head[M],nxt[M],to[M],cnt,w[M],n,m;
double a[N][N],ans;
void gauss() {
for(int i=1;i<=n;i++) {
int t=i;
while(!a[t][i]) t++;
if(i!=t) swap(a[t],a[i]);
double k=a[i][i];
for(int j=i;j<=n+1;j++) a[i][j]/=k;
for(int j=1;j<=n;j++)
if(j!=i&&a[j][i]) {
k=a[j][i];
for(int p=i;p<=n+1;p++) a[j][p]-=k*a[i][p];
}
}
}
void lnk(int x,int y,int z){
to[++cnt]=y,nxt[cnt]=head[x],w[cnt]=z,head[x]=cnt;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int u,v,val;scanf("%d%d%d",&u,&v,&val);
lnk(u,v,val);out[u]++;
if(u!=v) out[v]++,lnk(v,u,val);
}
int gg;
for(int k=0;k<=30;k++){
if(k==0) gg=1;else gg=gg<<1;
memset(a,0,sizeof(a));
for(int i=1;i<n;i++){
a[i][i]=-1.0;
for(int j=head[i];j;j=nxt[j]){
int y=to[j];
if(w[j]&gg){
a[i][y]-=1.0/out[i],a[i][n+1]-=1.0/out[i];
}
else a[i][y]+=1.0/out[i];
}
}
a[n][n]=-1.0;gauss();ans+=a[1][n+1]*gg;
}
printf("%.3f\n",ans);
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和路径
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2337题解: 概率dp, 因为异或的每一位之间没有关系,我们就依次考虑每一位k.(即边权要么为 ...
- 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] ...
随机推荐
- laravel MethodNotAllowedHttpException错误一个原因
前两天在写api的时候,出现一个之前都没有碰到过的问题,如图 可以说提示信息是很不友好了,然后打开错误日志,发现报了一个MethodNotAllowedHttpException这样的错误,这样错误我 ...
- C#图片压缩上传
/// <summary> /// 压缩图片 /// </summary> /// <param name="iSource">图片文件< ...
- 状态机编程思想(2):删除代码注释(目前支持C/C++和Java)
有时为了信息保密或是单纯阅读代码,我们常常需要删除注释. 之前考虑过正则表达式,但是感觉实现起来相当麻烦.而状态机可以把多种情况归为一类状态再行分解,大大简化问题.本文就是基于状态机实现的. 删除C/ ...
- JavaWeb框架SSH_Struts2_(四)----->表达式语言OGNL
1. 表达式语言OGNL OGNL简介 OGNL基本语法 常量 操作符 OGNL表达式 OGNL基础 OGNL上下文 OGNL值栈 OGNL的访问 2. 具体内容 2.1 OGNL简介 OGNL(Ob ...
- WebApi接收复杂类型参数
当接收实体时,该实体类不能添加Serializable属性,否则传来的json数据无法映射成功?
- CCF-201412-2-Z字形扫描
问题描述 试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zi ...
- Centos下抓包
刚才遇到一个问题,微信配置时token总是失败. 于是抓一下服务器的包.看看是否是数据传输出了问题. 先安装工具 [Shell] 纯文本查看 复制代码 ? 1 yum install -y wires ...
- froms中判断数据长度自定义提示
class NumberForm(BaseForm): querynumber = forms.CharField(error_messages={'required':u'请输入手机号'}) def ...
- 》》HTML5 移动页面自适应手机屏幕四类方法
1.使用meta标签:viewport H5移动端页面自适应普遍使用的方法,理论上讲使用这个标签是可以适应所有尺寸的屏幕的,但是各设备对该标签的解释方式及支持程度不同造成了不能兼容所有浏览器或系统. ...
- 我的Android进阶之旅------>Android知识图谱
Android知识图谱.快来看看哪方面有漏洞? 该图转自:http://blog.csdn.net/xyz_lmn/article/details/41411355