题目

题解

突然get到这样路径期望的题目八成是高斯消元

因为路径上的dp往往具有后效性,这就形成了一个方程组

对于本题来说,直接对权值dp很难找到突破口

但是由于异或是位独立的,我们考虑求出每一位的期望

设\(f[i]\)为从节点\(i\)出发到达N的期望值

有\(f[i] = \frac{f[j]}{degree[i]} + \frac{1 - f[k]}{degree[i]} [edge(i,j) = 0,edge(i,k) = 1]\)

因为如果出边权值为0,异或之后值不变,等于\(f[j]\)的值,

如果权值为1,异或后取反,等于\(1-f[k]\)

同时\(f[n] = 0\)

列出式子后就是一个n元方程组

最后要注意自环只算该点的一条边

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define eps 1e-9
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u]; k; k = ed[k].nxt)
using namespace std;
const int maxn = 105,maxm = 100005,INF = 1000000000;
inline int read(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57) {if (c == '-') flag = -1; c = getchar();}
while (c >= 48 && c <= 57) {out = (out << 1) + (out << 3) + c - 48; c = getchar();}
return out * flag;
}
int h[maxn],ne = 2;
double de[maxn];
struct EDGE{int to,nxt,w;}ed[maxm];
inline void build(int u,int v,int w){
ed[ne] = (EDGE){v,h[u],w}; h[u] = ne++;
if (u != v){
ed[ne] = (EDGE){u,h[v],w}; h[v] = ne++;
de[u] += 1,de[v] += 1;
}
else de[u] += 1;
}
int n,m,p;
double A[maxn][maxn],ans;
void gause(){
for (int i = 1; i <= n; i++){
int j = i;
for (int k = i + 1; k <= n; k++)
if (fabs(A[k][i]) > fabs(A[j][i])) j = k;
if (fabs(A[j][i]) < eps) exit(0);
double t = A[j][i];
for (int k = i; k <= n + 1; k++) swap(A[i][k],A[j][k]),A[i][k] /= t;
for (j = i + 1; j <= n; j++){
if (fabs(A[j][i]) > eps){
t = A[j][i];
for (int k = i; k <= n + 1; k++)
A[j][k] -= A[i][k] * t;
}
}
}
for (int i = n; i; i--){
for (int j = n; j > i; j--)
A[i][n + 1] -= A[i][j] * A[j][n + 1];
A[i][n + 1] /= A[i][i];
}
}
void solve(){
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n + 1; j++)
A[i][j] = 0;
for (int i = 1; i < n; i++){
A[i][i] = de[i];
Redge(i){
if ((ed[k].w >> p) & 1){
A[i][n + 1] += 1.0;
A[i][ed[k].to] += 1.0;
}else A[i][ed[k].to] -= 1.0;
}
}
A[n][n] = 1;
gause();
ans += (1 << p) * A[1][n + 1];
}
int main(){
n = read(); m = read();
int a,b,w;
for (int i = 1; i <= m; i++){
a = read(); b = read(); w = read();
build(a,b,w);
}
for (p = 0; (1 << p) <= INF; p++) solve();
printf("%.3lf\n",ans);
return 0;
}

BZOJ2337 [HNOI2011]XOR和路径 【概率dp + 高斯消元】的更多相关文章

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

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

  2. [HNOI2011]XOR和路径 概率期望 高斯消元

    题面 题解:因为异或不太好处理,,,因此按位来算,这样最后的答案就是每一位上的值乘对应的权值再求和.本着期望要倒退的原则,,,我们设$f[i]$表示从$i$到$n$,xor和为1的概率.那么观察$xo ...

  3. BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元

    BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元 题意: 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 3 ...

  4. 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元

    题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...

  5. LightOJ - 1151概率dp+高斯消元

    概率dp+高斯消元 https://vjudge.net/problem/LightOJ-1151 题意:刚开始在1,要走到100,每次走的距离1-6,超过100重来,有一些点可能有传送点,可以传送到 ...

  6. BZOJ3270 博物館 概率DP 高斯消元

    BZOJ3270 博物館 概率DP 高斯消元 @(XSY)[概率DP, 高斯消元] Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博 ...

  7. BZOJ 3270: 博物馆 [概率DP 高斯消元]

    http://www.lydsy.com/JudgeOnline/problem.php?id=3270 题意:一张无向图,一开始两人分别在$x$和$y$,每一分钟在点$i$不走的概率为$p[i]$, ...

  8. 【BZOJ3640】JC的小苹果 概率DP+高斯消元

    [BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话说JC历经艰辛来到了城市B,但 ...

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

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

随机推荐

  1. HDU 1171 Big Event in HDU 杭电大事件(母函数,有限物品)

    题意: 分家问题,对每种家具都估个值,给出同样价值的家具有多少个,要求尽可能平分,打印的第一个数要大于等于第二个数. 思路: 可以用背包做,也可以用母函数.母函数的实现只需要注意一个点,就是每次以一种 ...

  2. 数据倾斜是多么痛?spark作业调优秘籍

    目录视图 摘要视图 订阅 [观点]物联网与大数据将助推工业应用的崛起,你认同么?      CSDN日报20170703——<从高考到程序员——我一直在寻找答案>      [直播]探究L ...

  3. db2的离线备份和还原

    db2cmd中运行命令 1.做一个离线备份(db2cmd)mstsc—>db2cmd db2 connect to  mydb                    #连接数据库 db2 lis ...

  4. Hibernate映射文件配置(hbm.xml和注解方式)

    一:通过*.hbm.xml配置实体的实现方式 mappingResources用于指定少量的hibernate配置文件像这样 Xml代码  <property name="mappin ...

  5. ios之UIWebView(1)

    UIWebView可以让你创建一个网页浏览器,类似safari,而不是在程序中启动safsri哦.是不是觉得很棒呢?废话少说,切入正题. 一.创建UIWebView [java] view plain ...

  6. HashMap允许将null用作键 也允许将null作为值

    HashMap不能保证元素的顺序,HashMap能够将键设为null,也可以将值设为null. 与之对应的是Hashtable,(注意大小写:不是HashTable),Hashtable不能将键和值设 ...

  7. LeetCode 最大子序和

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 ...

  8. Python Third Day-文件处理

    文件处理 打开文件,得到文件句柄并赋值给一个变量f=open('a.txt','r',encoding='utf-8')#默认打开的方式为r指的是文本文件,全名为‘rt’#w文件方式指的是如果有a.t ...

  9. A Fast and Easy to Use AES Library

    http://www.codeproject.com/Articles/57478/A-Fast-and-Easy-to-Use-AES-Library Introduction EfAesLib i ...

  10. java 之Thread线程相关yield()、sleep()、wait()、join()、run和start方法详解

    1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...