bzoj 2337
有人说这题像游走...
关于游走的思想,他死了...
明明直接从期望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的更多相关文章
- BZOJ 2337 XOR和路径 | 高斯消元 期望 位运算
BZOJ 2337 XOR和路径 题解 这道题和游走那道题很像,但又不是完全相同. 因为异或,所以我们考虑拆位,分别考虑每一位: 设x[u]是从点u出发.到达点n时这一位异或和是1的概率. 对于所有这 ...
- 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径
2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 682 Solved: 384[Submit][Stat ...
- BZOJ 2337 XOR和路径(高斯消元)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2337 题意:给定一个带权无向图.从1号点走到n号点.每次从当前点随机(等概率)选择一条相 ...
- 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】 2337: [HNOI2011]XOR和路径(概率DP、高斯消元)
2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1170 Solved: 683 Description ...
- bzoj 2337: [HNOI2011]XOR和路径
Description Input Output Sample Input Sample Output HINT Source Day2 终于把这个史前遗留的坑给填了... 首先异或的话由位无关性,可 ...
- BZOJ 2337 XOR和路径(概率DP)
求点1到点n经过的路径权值异或和的期望. 考虑按位计算,对于每一位来说,令dp[i]表示从i到n的异或和期望值. 那么dp[i]=sum(dp[j]+1-dp[k]).如果w(i,j)这一位为0,如果 ...
- BZOJ 2337 [HNOI2011]XOR和路径 ——期望DP
首先可以各位分开求和 定义$f(i)$表示从i到n的期望值,然后经过一些常识,发现$f(n)=1$的时候的转移,然后直接转移,也可以找到$f(n)=0$的转移. 然后高斯消元31次就可以了. #inc ...
随机推荐
- Vue 中的 key 有什么作用?
key 是为 Vue 中 vnode 的唯一标记,通过这个 key,我们的 diff 操作可以更准确.更快速. Vue 的 diff 过程可以概括为:oldCh 和 newCh 各有两个头尾的变量 o ...
- 源码编译mariadb
1.写一个一键安装 mariadb 数据库脚本. [root@centos8mini ~]#vim install_mariadb #!/bin/bash#安装包PACKAGE="maria ...
- (原创)odoo中字段默认值的获取顺序
odoo中某个字段的默认值的取值顺序 1.搜索当前记录集(recordset)中的context中是否存在"default_字段名"的键,如果存在则取值 2.搜索模型(ir.def ...
- 达芬奇18.1.2安装包下载+软件详细破解安装教程(Win&Mac)
DaVinci Resolve v18.1.2是一款在同一个软件工具中,将剪辑.调色.视觉特效.动态图形和音频后期制作融于一身的解决方案!它采用美观新颖的界面设计,易学易用,能让新手用户快速上手操作, ...
- DP7361 是一款立体声六通道线性输出的数模转换器-兼容CS4361
DP7361 是一款立体声六通道线性输出的数模转换器,内含插值滤波器.Multi-Bit 数模转换器.模拟输出滤波器,支持主流的音频数据格式. DP7361 片上集成线性低通模拟滤波器和四阶Multi ...
- 【React】React项目实践中的问题
报错'react-scripts' 不是内部或外部命令,也不是可运行的程序 React新建脚手架项目,在目录下添加了public\index.html,src\App.js,index.js文件,除此 ...
- java基础(一)~~内存分析
1.java内存分析 2.2.面向对象内存分析 Java虚拟机的内存可以分为三个区域:栈(stack).堆(heap).方法区(method area): 2.2.1.栈 栈的特点如下: 1.栈描述的 ...
- 关于filter_input函数
PHP: filter_input <?php $search_html = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_ ...
- gson TypeAdapter 和FieldNamingStrategy,SerializedName实现属性名称的设置别名
gson TypeAdapter 和FieldNamingStrategy,SerializedName实现属性名称的设置别名 package com.example.core.mydemo.Type ...
- ubuntu系统中NTP服务配置
首先进行软件的安装:sudo apt-get install ntp sudo apt-get install ntpdate(手动校时软件) 然后修改ntp配置文件:sudo vim /etc/nt ...