【BZOJ2337】XOR和路径,概率期望DP+高斯消元
Time:2016.08.27
Author:xiaoyimi
转载注明出处谢谢
传送门
思路:
与游走思路有一定相似的地方
对答案的每一位进行判断
通过高斯消元解出每个点到n xor路径为1的概率
对于关于第i个点的方程来说
第i项系数为f[i][i]=-1,其他项j为
⎧⎩⎨⎪⎪⎪⎪⎪⎪0=>不存在e(i,j)或j=nf[i][j]d[j]=>存在e(i,j)且w[e]在当前位为01−f[i][j]d[j]=>存在e(i,j)且w[e]在当前位为1 \begin{cases} 0=>不存在e(i,j)或j=n\\ \frac{f[i][j]} {d[j]}=>存在e(i,j)且w[e]在当前位为0\\ \frac{1-f[i][j]} {d[j]}=>存在e(i,j)且w[e]在当前位为1 \end{cases}
然后高斯消元解就可以了,答案就是∑30i=1ans[1]⋅2i\sum^{30}_{i=1}ans[1]·2^i
复杂度O(30⋅n3)O(30·n^3)
注意自环时只加一条边而不是双向边
注意重边时要多次累加方程的系数
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define M 10005
#define eps 1e-5
using namespace std;
int n,m,tot;
struct edge{int u,v,w,next;
}e[M<<1];
int first[105],d[105];
double f[105][105],ans[105],sum;
void add(int x,int y,int z)
{e[++tot]=(edge){x,y,z,first[x]};first[x]=tot;++d[x];if (x==y) return;e[++tot]=(edge){y,x,z,first[y]};first[y]=tot;++d[y];
}
void gauss()
{int t;double p;for (int i=1;i<n;++i){t=i;for (int j=i+1;j<=n;++j)if (fabs(f[t][i])<fabs(f[j][i])) t=j;if (t!=i)for (int j=i;j<=n+1;++j)swap(f[t][j],f[i][j]);for (int j=i+1;j<=n;++j){p=f[j][i]/f[i][i];for (int k=i+1;k<=n+1;++k)f[j][k]-=f[i][k]*p;}}for (int i=n;i;--i){p=0;for (int j=i+1;j<=n;++j) p+=ans[j]*f[i][j];ans[i]=(f[i][n+1]-p)/f[i][i]; }
}
main()
{scanf("%d%d",&n,&m);int x,y,z;for (int i=1;i<=m;++i)scanf("%d%d%d",&x,&y,&z),add(x,y,z);for (int i=30;i>=0;--i){memset(f,0,sizeof(f));for (int j=1;j<n;++j)for (int k=first[j];k;k=e[k].next)if (e[k].w>>i&1)f[j][n+1]-=1.0/d[j],f[j][e[k].v]-=1.0/d[j];elsef[j][e[k].v]+=1.0/d[j];for (int j=1;j<=n;++j) --f[j][j];gauss();sum+=ans[1]*(1<<i);}printf("%.3lf\n",sum);
}
【BZOJ2337】XOR和路径,概率期望DP+高斯消元相关推荐
- 洛谷 P3211 [HNOI2011]XOR和路径(推dp+高斯消元)
传送门 首先,异或的话直接讨论不好讨论,那么我们可以按位讨论,对于每一位讨论出来一个结果,然后将结果相加就好了. 然后考虑怎么讨论一位上的结果. 我们可以设出来一个dp方程:f(i)表示i到n的异或和 ...
- LightOJ 1151 Snakes and Ladders (期望DP + 高斯消元)
Description 'Snakes and Ladders' or 'Shap-Ludu' is a game commonly played in Bangladesh. The game is ...
- 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡 期望DP+高斯消元
[BZOJ1778][Usaco2010 Hol]Dotp 驱逐猪猡 Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300 ...
- P4457-[BJOI2018]治疗之雨【期望dp,高斯消元】
正题 题目链接:https://www.luogu.com.cn/problem/P4457 题目大意 开始一个人最大生命值为nnn,剩余hphphp点生命,然后每个时刻如果生命值没有满那么有1m+1 ...
- ICPC 2005 hangzhou Generator (UVA1358)KMP + 期望DP / 高斯消元
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Generator Weblink https://www.luogu.com.cn/problem/ ...
- BZOJ 1778 Usaco2010 Hol Dotp 驱逐猪猡 期望DP+高斯消元
题目大意:给定一个无向图,炸弹从1号节点出发,每个时刻有P/Q的概率爆炸,如果某个时刻没有爆炸,就会等概率沿着随机一条出边走到下一个城市,求最终每个城市的爆炸概率 #include <cmath ...
- 【BZOJ3640】JC的小苹果 概率DP+高斯消元
[BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. "你是我的小丫小苹果,怎么爱你都不嫌多!" "点亮我生命的火,火火火火火!&qu ...
- BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元
BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元 题意: 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 3 ...
- 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元
题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...
最新文章
- Regular Expression Matching
- 有5个学生,4门课程,用子函数的方法显示平均分最高的学生的所有成绩
- Go语言中的Struct
- 3D打印机分类与速度
- 每次没事情的时候都去学校的活动室或者武术室
- 如何高效学习Java?本文给你一些建议!
- gcc undefined reference to 问题解决方法(使用库)
- 关系代数的自然连接符号_初中数学知识清单之代数式的认识
- 如何通过Restful API的方式读取SAP Commerce Cloud的Product Reference
- Vss服务端用户存在,但客户端登陆不进去
- 工作44:阅读代码1 dictionary
- Java描述设计模式(22):策略模式
- 中文版Visual Studio 2008 SP1 智能提示为英文的补丁发布
- 拼多多加大百亿补贴力度,iPhone 12中配版券后价5899元
- java 搜索起始位置,从Java中的给定位置搜索字符
- .Net控件Telerik全套下载:Telerik Controls 2010 Q2 (附加DLL文件+源码)
- LeetCode 64.最小路径和(动态规划)
- svn 命令行_Ubuntu下Subversion(SVN)的快速安装与配置
- 添加几行代码实现百度文库的复制
- IOUtils工具类的依赖maven
热门文章
- 爬虫智能解析库 Readability 和 Newspaper 的用法
- java定时任务管理_基于SpringBoot+layui秒级定时任务管理:JTimer for JAVA项目
- 关于三星某些系列笔记本电脑无法安装Windows10的原因及解决办法
- 解决 git pull/push 每次都要输入用户名密码的问题
- day16 java中的package和import
- vue v-for循环动态获取_快速、简洁讲明Vue中vfor循环key的作用
- oracle餐饮权,初秋来临,献上餐饮数字化经营的“暖心大餐”
- ajax jsonp post php,※ajax的post方式注意点※及jsonp的封装
- esxi 5.5运行linux拯救模式,启用Esxi 5.5 SSH 功能
- 封装 电流密度 重布线_具有周边硅通孔的晶圆级芯片封装有限元分析