[HNOI2011]XOR与路径
https://zybuluo.com/mdeditor#1094266
标签(空格分隔): 高斯消元 期望
题面
从 1 号节点开始,以相等的概率,随机选择与当前节点相关联的某条边,并沿这条边走到下一个节点,重复这个过程,直到走到 N 号节点为止,便得到一条从 1 号节点到 N 号节点的路径。显然得到每条这样的路径的概率是不同的并且每条这样的路径的“XOR 和”也不一样。现在请你求出该算法得到的路径的“XOR 和”的期望值。
解析
这和[HNOI2013]游走好像啊。点概率和边概率的公式一模一样。于是没怎么动脑子就切了。
但我们发现XOR和的期望值不太好处理,因为期望是不能异或的。
根据异或的套路,我们应该分位计算。
在分位的情况下,有公式(\(E\)是边的意思)
\(P[u]=\sum\frac{P[v]}{in[u]}[E(u,v)=0]+\sum\frac{1-P[v]}{in[u]}[E(u,v)=1](v\in u的邻点)\)
于是我们就可以get一个叫\(1\bigotimes x=1-x(x为实数)\)的新姿势。
这显然不能DP,于是便想想高斯消元,化化式子。
默默移项\(P[u]+\sum\frac{P[v]}{in[u]}[E(u,v)=1]-\sum\frac{P[v]}{in[u]}[E(u,v)=0]=\sum\frac{1}{in[u]}[E(u,v)=1]\)
接下来就只要注意自环问题了。
Update:记得提醒我写篇期望总结。
// luogu-judger-enable-o2
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#define ll long long
#define re register
#define il inline
#define fp(i,a,b) for(re int i=a;i<=b;i++)
#define fq(i,a,b) for(re int i=a;i>=b;i--)
using namespace std;
const int N=200;
int h[N*N<<1],cnt,in[N],n,m;
double dp[N][N],x[N],ans=0;
struct Edge
{
int to,next;ll w;
}e[N*N<<1];
il void add(re int u,re int v,re int w)
{
e[++cnt]=(Edge){v,h[u],w};h[u]=cnt;
}
il int gi()
{
re int x=0,t=1;
re char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if(ch=='-') t=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*t;
}
il void Gauss()
{
fp(i,1,n)
fp(j,i+1,n)
fq(k,n+1,1) dp[j][k]-=dp[i][k]*dp[j][i]/dp[i][i];
fq(i,n,1)
{
x[i]=dp[i][n+1];
fq(j,n,i+1) x[i]-=dp[i][j]*x[j];
x[i]/=dp[i][i];
}
}
int main()
{
memset(h,-1,sizeof(h));
n=gi();m=gi();
fp(i,1,m)
{
re int u=gi(),v=gi(),w=gi();
add(u,v,w);++in[v];
if(u^v) add(v,u,w),++in[u];
}
fp(ysn,0,30)
{
memset(dp,0,sizeof(dp));
fp(u,1,n-1)
{
dp[u][u]=1;
for(re int i=h[u];i+1;i=e[i].next)
{
re int v=e[i].to,w=e[i].w&(1<<ysn);
if(w) dp[u][v]+=1.0/in[u],dp[u][n+1]+=1.0/in[u];
else dp[u][v]-=1.0/in[u];
}
}
dp[n][n]=1;
Gauss();
ans+=x[1]*(1<<ysn);
}
printf("%.3lf\n",ans);
return 0;
}
[HNOI2011]XOR与路径的更多相关文章
- 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径
2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 682 Solved: 384[Submit][Stat ...
- BZOJ2337: [HNOI2011]XOR和路径
题解: 异或操作是每一位独立的,所以我们可以考虑每一位分开做. 假设当前正在处理第k位 那令f[i]表示从i到n 为1的概率.因为不是有向无环图(绿豆蛙的归宿),所以我们要用到高斯消元. 若有边i-& ...
- BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )
一位一位考虑异或结果, f(x)表示x->n异或值为1的概率, 列出式子然后高斯消元就行了 --------------------------------------------------- ...
- BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]
2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...
- [HNOI2011]XOR和路径 && [HNOI2013]游走
[HNOI2011]XOR和路径 题目大意 具体题目:戳我 题目: 给定一个n个点,m条边的有重边.有自环的无向图,其中每个边都有一个边权. 现在随机选择一条1到n的路径,路径权值为这条路径上所有边权 ...
- 【BZOJ 2337】 2337: [HNOI2011]XOR和路径(概率DP、高斯消元)
2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1170 Solved: 683 Description ...
- 【BZOJ2337】[HNOI2011]XOR和路径 期望DP+高斯消元
[BZOJ2337][HNOI2011]XOR和路径 Description 题解:异或的期望不好搞?我们考虑按位拆分一下. 我们设f[i]表示到达i后,还要走过的路径在当前位上的异或值得期望是多少( ...
- [Wc2011] Xor 和 [HNOI2011]XOR和路径
Xor F.A.Qs Home Discuss ProblemSet Status Ranklist Contest 入门OJ ModifyUser autoint Logout 捐赠本站 Prob ...
- LG3211 [HNOI2011]XOR和路径
题意 题目描述 给定一个无向连通图,其节点编号为 1 到 N,其边的权值为非负整数.试求出一条从 1 号节点到 N 号节点的路径,使得该路径上经过的边的权值的"XOR 和"最大.该 ...
- 【BZOJ】2337: [HNOI2011]XOR和路径 期望+高斯消元
[题意]给定n个点m条边的带边权无向连通图(有重边和自环),在每个点随机向周围走一步,求1到n的期望路径异或值.n<=100,wi<=10^9. [算法]期望+高斯消元 [题解]首先异或不 ...
随机推荐
- 梦想CAD控件关于比较问题
全图比较 怎么比较两个CAD图纸文件修改前后的不同部分呢?在工程图纸设计中,我们更多情况下可能需要对同一张工程图的前后修改部分进行对比,以确定工程图纸的改动部分及追溯原因,本教程演示了几种常见的比较方 ...
- java求两个集合的交集和并集,比较器
求连个集合的交集: import java.util.ArrayList; import java.util.List; public class TestCollection { public st ...
- acm相关(纯转载)
我觉得很好的文章,之所以放随笔是为了让大家看到这些优秀的博文 acm如何起步 acm重点题型 动态规划题目总结 背包九讲阅读网站
- centos7+VMware Workstation创建共享文件夹
1.第一步设置宿主机共享文件夹路径 2.挂载VMware Tools,如下操作会将tools以光盘挂载点的方式进入到系统中. 3.centos7 挂载存有VMware Tools的光盘并进行安装 1) ...
- [Python3网络爬虫开发实战] 1.1-Python3的安装
既然要用Python 3开发爬虫,那么第一步一定是安装Python 3.这里会介绍Windows.Linux和Mac三大平台下的安装过程. 1. 相关链接 官方网站:http://python.org ...
- Linux:使用root踢掉其他用户
首先使用w命令查看所有在线用户: 执行命令: pkill -kill -t tty3 再用w命令查看是否已经强制踢掉: TTY 是终端的意思 TTY :0 表示root用户登陆图形化界面的终 ...
- 负载均衡之nginx+consul(自动更新路由)
前几篇先是记载了如何通过nginx配置服务负载均衡,后面记载了如何通过 ocelot 配置 服务负载均衡,分别介绍了用webapi注册服务以及配置文件注册服务,通过ocelot webapi + co ...
- VM 与 与 Linux 的安装
[VMWare 安装] 输入后, [CentOS ] 1 检查 BIOS 虚拟化 2.新建虚拟机 3.新建虚拟机向导 4创建虚拟空盘 5 安装 Linux 系统对应的 CentOS 6 虚 ...
- 解决Windows Server 2012 R2 Datacenter云服务器无法运行opencv python程序的问题
写了个基于opencv的python程序,pyinstaller 32位机打包后在win7/win10 32/64正常运行,在Windows Server 2012 R2 Datacenter云服务器 ...
- mysql 查询当天、本周,本月,上一个月的数据---https://www.cnblogs.com/benefitworld/p/5832897.html
mysql 查询当天.本周,本月,上一个月的数据 今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM ...