2337: [HNOI2011]XOR和路径

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 682  Solved: 384
[Submit][Status][Discuss]

Description


  几乎是一路看题解过来了。。
  拖了一个星期的题目- -
  已然不会概率DP(说得好像什么时候会过一样),高斯消元(打一次copy一遍)。
  发现异或题目的新解决方法:按位处理。。
  发现DP新方法:高斯消元。
  f[k][i]代表第k位权值起点为i到终点时答案的期望值。
  则对一条边<i,j>有两种转移:当边权为0,f[k][j]/deg[i].当边权为1,(1-f[k][j])/deg[i]。
  由于是一个无向图。
  topo DP很不好搞。
  只能高斯消元。
 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath> using namespace std; struct edge{
int to,c,last;
}edge[]; int last[],tot=,in[],n; double f[][],V[]; inline int read()
{
int x=;char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch<=''&&ch>='')x=x*+ch-'',ch=getchar();
return x;
} void add(int u,int v,int c)
{
edge[++tot].to=v,edge[tot].last=last[u],edge[tot].c=c,last[u]=tot;
in[u]++;
} void chan(int a,int b)
{
for(int i=;i<=n+;i++)
swap(f[a][i],f[b][i]);
} double gauss()
{
for(int i=;i<=n;i++)
{
if(!f[i][i])
{
for(int j=i+;j<=n;j++)
if(f[i][j])
chan(i,j);
}
for(int j=;j<=n;j++)
{
if(i==j)continue;
double xi=f[j][i]/f[i][i];
for(int k=;k<=n+;k++)f[j][k]-=xi*f[i][k];
}
}
return f[][n+]/f[][];
} int main()
{
int m,u,v,c;
n=read(),m=read();
for(int i=;i<=m;i++)
{
u=read();v=read();c=read();
add(u,v,c);
if(u!=v)add(v,u,c);
}
for(int i=;i<;i++)
{
for(int j=;j<n;j++)
{
f[j][j]=;
for(int k=last[j];k;k=edge[k].last)
{
if(edge[k].c&(<<i))f[j][edge[k].to]+=(double)1.0/in[j],f[j][n+]+=(double)1.0/in[j];
else f[j][edge[k].to]-=(double)1.0/in[j];
}
}
f[n][n]=;
V[i]=gauss();
memset(f,,sizeof(f));
}
double ans=;
int cnt=;
for(int i=;i<;i++)ans+=cnt*V[i],cnt*=;
printf("%.3lf",ans);
return ;
}

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

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

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

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

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

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

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

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

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

  5. BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]

    2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...

  6. BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )

    一位一位考虑异或结果, f(x)表示x->n异或值为1的概率, 列出式子然后高斯消元就行了 --------------------------------------------------- ...

  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. bzoj 2337 [HNOI2011]XOR和路径【高斯消元+dp】

    首先,我们发现,因为是无向图,所以相连的点之间是有"依赖性"的,所以不能直接用dp求解. 因为是xor,所以按位处理,于是列线性方程组,设$ x[i] $为点i到n异或和为1的期望 ...

随机推荐

  1. [leetcode]_Maximum Depth of Binary Tree

    第三道树的题目,我还是不会,我擦,怎么递归算法还是不能很好理解.看来还得好好研究下递归算法. 题目:求一棵树的最大深度. 思路:递归地求取左子树最大深度 和 右子树最大深度,返回较大值即为 整棵树的 ...

  2. JavaScript的闭包是什么意思以及作用和应用场景

    JavaScript闭包 1.什么是闭包 百度百科对于闭包的解释是:闭包是指可以包含自由(未绑定到特定对象)变量的代码块:这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中 ...

  3. luigi学习2-在hadoop上运行Top Artists

    一.AggregateArtistsHadoop class AggregateArtistsHadoop(luigi.contrib.hadoop.JobTask): date_interval = ...

  4. asp.net实现md5加密方法详解

    MD5加密简单的说就是把一段明文 通过某种运算方式 求出密文. 例如:明文为:abcdefg 通过一些列运算 得到 密文 7ac66c0f148de9519b8bd264312c4d64 它具有两个特 ...

  5. WIN10 64位下VS2015 MFC直接添加 halcon 12的CPP文件实现视觉检测

    近段时间开始接触halcon,但是在VS2015里面使用,无论是配置还是生产EXE文件,都不如意. 加上网上的教程很多,经过多次测试,其实有很多地方无需修改,如果修改的太多也失去了直接添加封装的意义. ...

  6. Linux操作系统常用命令

    http://www.cnblogs.com/huangzelin/p/5617611.html http://www.cnblogs.com/liumt/p/6117168.html

  7. C# 标准查询表达式

    一.标准查询运算符 1.C#提供了标准查询运算符,例如我想选择专利一系列(pantents)中以年份19开头的专利,可以用如下语句: IEnumerable<Patent> pantent ...

  8. Mongodb的索引--学习笔记(未完)

    全文索引 建立方法: --在articles集合的key字段上创建全文索引 db.articles.ensureIndex({key:"text"}) --在articles集合的 ...

  9. linux 下的使用 ln 创建 软链接 和 硬链接

    linux 下的一个指令 ln 作用: 创建软链接或者硬链接 Linux 系统下每创建一个文件,系统都会为此文件生成一个 index node 简称(inode) ,而每一个文件都包含用户数据(use ...

  10. Android--获取标题栏,状态栏,屏幕高度

    获取状态栏高度 Rect frame = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int ...