这个题让我认识到我以往对于图上期望概率的认识是不完整的,我之前只知道正着退还硬生生的AC做过的所有图,那么现在让我来说一下逆退,一般来说对于概率性的东西都只是正推,因为有了他爸爸才有了他,而对于期望性的东西可以说是从终点开始每个点都是以这个点为起点到终点的期望,那么就可以是有本节点开花遗传和继承。

本题中说求异或,那么根据异或的一般思路,一位一位的搞,每一位不是一就是二我么可以求从这个点到终点这一位是1的期望也就是概率了

#include<cstdio>
#include<cstring>
#include<iostream>
#define N 105
#define M 10005
using namespace std;
typedef double D;
D a[N][N],b[N],ans;
int head[N],t,bang[N],n,m;
struct T
{
int to,next,w;
}c[M<<];
inline void add(int x,int y,int z)
{
c[++t].to=y;
c[t].next=head[x];
head[x]=t;
bang[x]++;
c[t].w=z;
}
inline void Init()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
if(x!=y)
add(y,x,z);
}
}
inline D abs(D x)
{
return x<0.0?0.0-x:x;
}
inline void swap(D &x,D &y)
{
D temp=x;
x=y;
y=temp;
}
void gauss()
{
for(int i=,k=;i<=n;i++,k++)
{
int temp=i;
D need=abs(a[i][k]);
for(int j=i+;j<=n;j++)
if(abs(a[j][k])>need)
need=abs(a[j][k]),temp=j;
if(temp!=i)
for(int j=k;j<=n+;j++)
swap(a[temp][j],a[i][j]);
for(int j=i+;j<=n;j++)
{
need=a[j][k]/a[i][k];
for(int l=k;l<=n+;l++)
a[j][l]-=a[i][l]*need;
}
}
for(int i=n;i>;i--)
{
for(int j=i+;j<=n;j++)
a[i][n+]-=b[j]*a[i][j];
b[i]=a[i][n+]/a[i][i];
}
}
void job(int now)
{
for(int i=;i<=n;i++)
for(int j=;j<=n+;j++)
a[i][j]=0.0;
for(int x=;x<n;x++)
{
for(int i=head[x];i;i=c[i].next)
if(c[i].w&now)
a[x][c[i].to]-=1.0/bang[x],a[x][n+]-=1.0/bang[x];
else
a[x][c[i].to]+=1.0/bang[x];
a[x][x]-=1.0;
}
a[n][n]=1.0;
a[n][n+]=0.0;
gauss();
ans+=b[]*now;
}
inline void work()
{
for(int i=;i<;i++)
job(<<i);
printf("%.3lf",ans);
}
int main()
{
Init();
work();
return ;
}

BZOJ2337: [HNOI2011]XOR和路径 期望概率dp 高斯的更多相关文章

  1. BZOJ2337 [HNOI2011]XOR和路径 【概率dp + 高斯消元】

    题目 题解 突然get到这样路径期望的题目八成是高斯消元 因为路径上的dp往往具有后效性,这就形成了一个方程组 对于本题来说,直接对权值dp很难找到突破口 但是由于异或是位独立的,我们考虑求出每一位的 ...

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

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

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

    题意 题目链接 Sol 期望的线性性对xor运算是不成立的,但是我们可以每位分开算 设\(f[i]\)表示从\(i\)到\(n\)边权为1的概率,统计答案的时候乘一下权值 转移方程为 \[f[i] = ...

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

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

  5. BZOJ2337: [HNOI2011]XOR和路径

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

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

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

  7. BZOJ 3270 博物馆 && CodeForces 113D. Museum 期望概率dp 高斯消元

    大前提,把两个点的组合看成一种状态 x 两种思路 O(n^7) f[x]表示在某一个点的前提下,这个状态经过那个点的概率,用相邻的点转移状态,高斯一波就好了 O(n^6) 想象成臭气弹,这个和那个的区 ...

  8. [BZOJ2337][HNOI2011]XOR和路径(概率+高斯消元)

    直接不容易算,考虑拆成位处理. 设f[i]表示i到n的期望路径异或和(仅考虑某一位),则$f[y]=\sum\limits_{exist\ x1\to y=0}\frac{f[x1]}{d[x1]}+ ...

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

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

随机推荐

  1. python函数的返回值

    返回值:return1.没有返回值    #不写return    #只写return:结束一个函数    #return None2.有一个返回值    #可以返回任何数据类型    #只要返回就可 ...

  2. linux io 学习笔记(02)---条件变量,管道,信号

    条件变量的工作原理:对当前不访问共享资源的任务,直接执行睡眠处理,如果此时需要某个任务访问资源,直接将该任务唤醒.条件变量类似异步通信,操作的核心:睡眠.唤醒. 1.pthread_cond_t  定 ...

  3. EAS集锦

    前言 之前看过的相关BOS开发文档,整理了一些常用的API,一直没有来得及放上来,现在把整理的文件放上来,以备忘查看,分享.闲话少说,上干货! ps 图片不方便查看的话,可以拖住图片,加载到浏览器新页 ...

  4. mac 下 安装php扩展 - mcrypt

    由于自带的libmcrypt 可能版本低 另外通过brew安装的也不管用得去下载libmcrypt后编译安装 tar zxvf libmcrypt-2.5.8.tar.gz cd libmcrypt- ...

  5. ubuntu apt-get 使用代理设置,坑爹。。

    网上流传的export http_proxy=http://yourproxyaddress:proxyport是行不通的,虽然改了之后wget一类的可以用.当然去改.bashrc也不会有效果. 真正 ...

  6. 步骤1:JMeter 录制脚本接口测试

    JMeter 常用测试方法简介 1.下载安装 http://jmeter.apache.org/download_jmeter.cgi 安装JDK,配置环境变量JAVA_HOME. 系统要求:JMet ...

  7. Python-学习-import语句导入模块

    简单的学习一下调用外部的模块文件. 在Python中,模块是一种组织形式,它将彼此有关系的Pyrhon 代码组织到一个个独立的文件当中,模块可以包含可执行代码,函数,和类或者是这些东西的组合. 当我们 ...

  8. Python 3基础教程22-单个列表操作

    本文来介绍列表的操作,先看看单个列表的操作,列表有多个方法.以下多行代码,建议你写一个方法,测试运行一个方法,不然看起来很乱. # 元组操作 x = [5,6,2,1,6,7,2,7,9] # app ...

  9. MySQL☞dual虚拟表

    Dual表:虚拟表,专门用来测试各种函数:(本来以为跟Oracle中的dual表一样,发现还是不太一样)

  10. tensorflow nmt基本配置(tf-1.4)

    随着tensorflow的不断更新,直接按照nmt的教程搭建nmt环境会报错的...因此,需要一些不太好的办法来避免更多的问题出现.tensorflow看来在ubuntu和debian中运行是没有问题 ...