有人说这题像游走...

关于游走的思想,他死了...

明明直接从期望dp的角度考虑更简单合理嘛

首先由于是异或运算不妨逐位考虑

对于每一位,设状态$f[i]$表示从第$i$个点到第$n$个点,这一位上是$1$的概率

那么我们按边权讨论转移:

若这条边边权为$1$:$f[i]+=\frac{1-f[to]}{deg_{i}}$

若这条边边权为$0$:$f[i]+=\frac{f[to]}{deg_{i}}$

可是本题转移是成环的,因此直接dp是行不通的

但是我们可以考虑高斯消元嘛!

上面那个表达式很显然是个方程组,高斯消元解之即可!

整理一下,就得到了:$deg_{i}f[i]+[v_{i,to}==1]f[to]-[v_{i,to}==0]f[to]=\sum_{v_{i,to}==1}1$

(其实就是整合一下上面两个表达式,移个项就出来了)

算出$f[1]$乘贡献即可

(所以这题根本不需要基于点考虑边,只需要考虑点就可以了!不用研究边的期望!)

贴代码:

#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
using namespace std;
double eps=1e-8;
struct Edge
{
int nxt;
int to;
int val;
}edge[20005];
int head[105];
double inr[105];
double a[105][105];
int n,m,cnt=1;
double ans=0;
void add(int l,int r,int w)
{
edge[cnt].nxt=head[l];
edge[cnt].to=r;
edge[cnt].val=w;
head[l]=cnt++;
inr[l]++;
}
void Gauss()
{
for(int i=1;i<=n;i++)
{
int temp=i;
while(fabs(a[temp][i])<=eps)temp++;
if(temp!=i)for(int j=i;j<=n;j++)swap(a[i][j],a[temp][j]);
double now=a[i][i];
for(int j=i;j<=n+1;j++)a[i][j]/=now;
for(int j=i+1;j<=n;j++)
{
if(fabs(a[j][i])<=eps)continue;
now=a[j][i];
for(int k=i;k<=n+1;k++)a[j][k]-=now*a[i][k];
}
}
for(int i=n;i>=1;i--)for(int j=i-1;j>=1;j--)a[j][n+1]-=a[i][n+1]*a[j][i];
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;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);
}
for(int k=0;k<=30;k++)
{
memset(a,0,sizeof(a));
for(int i=1;i<=n-1;i++)
{
a[i][i]=inr[i];
for(int j=head[i];j;j=edge[j].nxt)
{
int to=edge[j].to;
if(edge[j].val&(1<<k))a[i][to]+=1.0,a[i][n+1]+=1.0;
else a[i][to]-=1.0;
}
}
a[n][n]=1;
Gauss();
ans+=a[1][n+1]*(1<<k);
}
printf("%.3lf\n",ans);
return 0;
}

bzoj 2337的更多相关文章

  1. BZOJ 2337 XOR和路径 | 高斯消元 期望 位运算

    BZOJ 2337 XOR和路径 题解 这道题和游走那道题很像,但又不是完全相同. 因为异或,所以我们考虑拆位,分别考虑每一位: 设x[u]是从点u出发.到达点n时这一位异或和是1的概率. 对于所有这 ...

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

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

  3. BZOJ 2337 XOR和路径(高斯消元)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2337 题意:给定一个带权无向图.从1号点走到n号点.每次从当前点随机(等概率)选择一条相 ...

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

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

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

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

  6. ●BZOJ 2337 [HNOI2011]XOR和路径

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2337题解: 概率dp, 因为异或的每一位之间没有关系,我们就依次考虑每一位k.(即边权要么为 ...

  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和路径

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

  9. BZOJ 2337 XOR和路径(概率DP)

    求点1到点n经过的路径权值异或和的期望. 考虑按位计算,对于每一位来说,令dp[i]表示从i到n的异或和期望值. 那么dp[i]=sum(dp[j]+1-dp[k]).如果w(i,j)这一位为0,如果 ...

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

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

随机推荐

  1. win10系统IE浏览器打不开 点击无反应 解决办法

    打开左下角开始菜单 步骤阅读 2 点击右边的Cortana,在下面的输入框中输入:regedit,等待它自动搜索出来后,以管理员身份打开这个注册表编辑器:当然熟悉电脑的同学可以直接打开运行----re ...

  2. (原创)Onlyoffice docs docker实例安装示例后,打开文档提示:文档下载失败

    不能使用localhost.请用本机ip访问

  3. class_schedule

    #!/usr/bin/python # -*- coding: UTF-8 -*- class Schedule(object):          def __init__(self, name=& ...

  4. sdio 移植st官方例程 stm32f103

    第一步:建立驱动文件 建立sdio_sdcard.h和sdio_sdcard.c,并将这两个文件添加到MDK工程中,如下图 第二步:移植官方例程 1.找到STM32F10x_StdPeriph_Lib ...

  5. perf 编译失败

    linux-6.0-rc2 : linux-6.0-rc2/tools/include/asm/../../arch/x86/include/asm/rmwcc.h:7:9: error: impli ...

  6. windows远程桌面之前用于连接到xxx的凭据无法工作

    使用windows远程桌面连接时报错提示: 之前用于连接到xxx的凭据无法工作 确认输入的用户名密码没有问题 解决方法: 打开gpedit.msc组策略管理,依次找到 计算机配置 > windo ...

  7. python 金融大数据风控建模实战--基于机器学习

    王青天 孔越编著, 2020年6月第一版 第一章介绍,介绍金融科技fintech是指使用技术提供财务解决方案.人工智能和机器学习技术可以帮助包括欺诈预防.风险管理.客户服务和营销等多个环节的智能化.个 ...

  8. c#笔记(四)——switch

    ---恢复内容开始--- using UnityEngine; using System.Collections;   public class Script1 : MonoBehaviour {   ...

  9. python调用C库的方法

    主要介绍两种,一种是python的标准库内置的ctype,另一种是第三方的pybind11. 除此之外,还有其他的方案,例如,CFFI.Cython等等. 一.python的标准库ctype

  10. Windows下使用Fortran读取HDF5文件

    需要用Fortran读取HDF5格式的GPM IMERG卫星降水文件,在已经安装HDF5库(参见VS2019+ Intel Fortran (oneAPI)+HDF5库的安装+测试 - chinago ...