2337: [HNOI2011]XOR和路径

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 1170  Solved: 683

Description

Input

Output

Sample Input

Sample Output

HINT

Source

【分析】

  这题终于自己打出来了高斯消元。没有对比代码了。。。

  很心酸啊。。调试的时候是完全没有方向的,高斯消元还要自己一步步列式子然后消元解。。【为什么错都不知道有时候

  这题显然是不能直接记录异或和然后DP的。

  显然是要拆位的。

  拆位之后f[i][0]表示从i走,走到终点,这一位异或和为0的概率。

  f[i][0]=f[j][0]*p (i->j 这一位边权为0)+f[j][1]*p (i->j 这一位边权为1)

  反之不写了

  f[n][0]=1 f[n][1]=0

  就是(2*n)^2规模的高斯消元。

  然后用f[1][1]乘这一位的贡献加进答案里面就好。

  一开始被卡精,eps太小,后来数组爆一位!!醉了!!

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define Maxn 110
#define Maxm 10010
const double eps=1e-; struct node
{
int x,y,c,next;
}t[Maxm*];
int first[Maxn],len;
double d[Maxn];
void ins(int x,int y,int c)
{
d[x]+=1.0;
t[++len].x=x;t[len].y=y;t[len].c=c;
t[len].next=first[x];first[x]=len;
} bool dcmp(double x) {return fabs(x)>eps;} double a[*Maxn][*Maxn],f[*Maxn];
void gauss(int n)
{
for(int i=;i<n;i++)
{
// if(a[i][i]==0) continue;
int t=i;
for(int j=i+;j<=n;j++) if(fabs(a[j][i])>fabs(a[t][i])) t=j;
if(t!=i)
{
for(int j=;j<=n;j++) swap(a[i][j],a[t][j]);
}
for(int j=i+;j<=n;j++)
{
double t=a[j][i]/a[i][i];
if(dcmp(a[j][i]))
{
for(int k=;k<=n;k++) a[j][k]-=a[i][k]*t;
}
}
}
for(int i=n-;i>=;i--)
{
for(int j=i+;j<n;j++) a[i][n]+=f[j]*a[i][j];
f[i]=-a[i][n]/a[i][i];
}
} int main()
{
int n,m,mx=;
scanf("%d%d",&n,&m);
len=;memset(first,,sizeof(first));
for(int i=;i<=n;i++) d[i]=;
for(int i=;i<=m;i++)
{
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
mx=max(mx,c);
ins(x,y,c);
if(x!=y) ins(y,x,c);
}
int l=;while((<<l)<=mx) l++;
double ans=;
for(int i=;i<=l;i++)
{
for(int j=;j<=n+n;j++) for(int k=;k<=n+n;k++) a[j][k]=;
for(int j=;j<n;j++)
{
a[j][j]=1.0;a[j+n][j+n]=1.0;
for(int k=first[j];k;k=t[k].next)
{
int y=t[k].y;
if(t[k].c&(<<i)) a[j][y+n]-=1.0/d[j],a[j+n][y]-=1.0/d[j];
else a[j][y]-=1.0/d[j],a[j+n][y+n]-=1.0/d[j];
}
a[j][(n<<)+]=a[j+n][(n<<)+]=;
}
a[n][n]=1.0;a[n+n][n+n]=1.0;
a[n][(n<<)+]=-1.0;a[n<<][(n<<)+]=;
gauss((n<<)+);
// printf("%.10lf\n",f[n+1]);
ans+=1.0*(<<i)*f[n+];
}
printf("%.3lf\n",ans);
return ;
}

【怎么说回家前A掉这题还是很兴奋的

【也说明我能自己打出概率的高斯消元了耶!

2017-04-22 16:06:09

【BZOJ 2337】 2337: [HNOI2011]XOR和路径(概率DP、高斯消元)的更多相关文章

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

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

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

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

  3. BZOJ 3270 博物馆 && CodeForces 113D. Museum 期望概率dp 高斯消元

    大前提,把两个点的组合看成一种状态 x 两种思路 O(n^7) f[x]表示在某一个点的前提下,这个状态经过那个点的概率,用相邻的点转移状态,高斯一波就好了 O(n^6) 想象成臭气弹,这个和那个的区 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. CSS权重的问题

    important > 内联 > ID > 类 > 标签 | 伪类 | 属性选择 > 伪对象 > 继承 > 通配符 1.行内样式,指的是html文档中定义的s ...

  2. Hibernate5笔记5--关联关系映射

    关联关系映射: 关联关系,是使用最多的一种关系,非常重要.在内存中反映为实体关系,映射到DB中为主外键关系.实体间的关联,即对外键的维护.关联关系的发生,即对外键数据的改变. 外键:外面的主键,即,使 ...

  3. 数论-求n以内的质数

    一.埃拉托斯特尼筛法 名字很高大上,然而并没有什么卵用…… 思路: 在把<=√n的质数所有的<=n的倍数剔除,剩下的就都是质数了,很容易理解…… 复杂度O(nloglogn) #inclu ...

  4. git summary

    Git 使用经验 缘起 一直想写一篇博文,记录我在使用git时遇到的问题以及解决办法.由于项目忙,偶尔的记录不连续,不成系统.今天有时间记录下来,方便自己以后查看. git 简介及其优势 简单来说,g ...

  5. Scrapy官网程序执行示例

    Windows 10家庭中文版本,Python 3.6.4,Scrapy 1.5.0, Scrapy已经安装很久了,前面也看了不少Scrapy的资料,自己尝试使其抓取微博的数据时,居然连登录页面(首页 ...

  6. 【Android开发日记】之入门篇(九)——Android四大组件之ContentProvider

    数据源组件ContentProvider与其他组件不同,数据源组件并不包括特定的功能逻辑.它只是负责为应用提供数据访问的接口.Android内置的许多数据都是使用ContentProvider形式,供 ...

  7. 决策树和adaboost

    前面:好老的东西啊,啊啊啊啊啊啊啊啊啊 来源于统计学习方法: 信息增益: 其中 信息增益率: 基尼指数: 取gini最小的 先剪枝——在构造过程中,当某个节点满足剪枝条件,则直接停止此分支的构造. 后 ...

  8. mysql自增id归0

    mysql自增id归0 ALTER TABLE table_name AUTO_INCREMENT=1;

  9. Python SGMLParser 的1个BUG??

    首先说一下,我用的是python 2.7,刚好在学Python,今天想去爬点图片当壁纸,但是当我用 SGMLParser 做 <img> 标签解析的时候,发现我想要的那部分根本没获取到,我 ...

  10. JavaScript中构造函数

    构造函数:函数的另一种执行方法,执行后创建对象,并创建原型对象. 原型链:对象访问构造函数的指针. Function函数:函数对象. Object函数:所有创建对象的祖辈对象,也是由Function对 ...