大前提,把两个点的组合看成一种状态 x

两种思路 O(n^7) f[x]表示在某一个点的前提下,这个状态经过那个点的概率,用相邻的点转移状态,高斯一波就好了

O(n^6) 想象成臭气弹,这个和那个的区别只是状态维数变化,f[x]表示这个状态出现的概率,高斯一下就好了

我比较傻只想出来O(n^7)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef double D;
D a[][],source[][],ans[],keep[],get[],sz;
int via[][],need,map[];
int n,m,Petya,Vasya;
inline int hash(int x,int y)
{
if(x>y)x^=y^=x^=y;
int gg=x*+y;
if(map[gg]==)map[gg]=++sz;
return map[gg];
}
inline D abs(D x)
{
return x<0.0?0.0-x:x;
}
void gause()
{
for(int i=,k=;i<=need&&k<=need;i++,k++)
{
int temp=i;
D h=abs(a[i][k]);
for(int j=i+;j<=need;j++)
if(h<abs(a[j][k]))
{
temp=j;
h=abs(a[j][k]);
}
if(temp!=i)
{
for(int j=k;j<=need+;j++)
swap(a[i][j],a[temp][j]);
}
for(int j=i+;j<=need;j++)
{
h=a[j][k]/a[i][k];
for(int l=k;l<=need+;l++)
a[j][l]-=h*a[i][l];
}
}
for(int i=need;i>;i--)
{
for(int j=i+;j<=need;j++)
a[i][need+]-=a[i][j]*get[j];
get[i]=a[i][need+]/a[i][i];
}
}
void blabla(int x)
{
for(int i=;i<;i++)
for(int j=;j<;j++)
a[i][j]=source[i][j];
a[hash(x,x)][need+]=1.0;
gause();
ans[x]=get[hash(Petya,Vasya)];
}
void pre()
{
scanf("%d%d%d%d",&n,&m,&Petya,&Vasya);
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
via[x][++via[x][]]=y;
via[y][++via[y][]]=x;
}
need=n*(n+)/;
for(int i=;i<=n;i++)
scanf("%lf",&keep[i]);
for(int i=;i<=n;i++)
for(int j=i;j<=n;j++)
{
int x=hash(i,j);
if(i==j)
{
source[x][x]=1.0;
continue;
}
D Viai=1.0*via[i][],Viaj=1.0*via[j][];
D Keep=(1.0-keep[i])*(1.0-keep[j])/Viai/Viaj;
for(int z=;z<=via[i][];z++)
for(int y=;y<=via[j][];y++)
source[x][hash(via[i][z],via[j][y])]+=Keep;
Keep=(1.0-keep[i])*keep[j]/Viai;
for(int z=;z<=via[i][];z++)
source[x][hash(via[i][z],j)]+=Keep;
Keep=(1.0-keep[j])*keep[i]/Viaj;
for(int y=;y<=via[j][];y++)
source[x][hash(via[j][y],i)]+=Keep;
source[x][x]+=keep[i]*keep[j];
source[x][x]-=1.0;
}
}
void work()
{
ans[n]=1.0;
for(int i=;i<n;i++)
{
blabla(i);
ans[n]-=ans[i];
}
}
void print()
{
for(int i=;i<=n;i++)
printf("%.10lf ",ans[i]);
}
int main()
{
pre();
work();
print();
}

BZOJ 3270 博物馆 && CodeForces 113D. Museum 期望概率dp 高斯消元的更多相关文章

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

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

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

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

  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. BZOJ 3270: 博物馆 [概率DP 高斯消元]

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

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

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

  7. BZOJ 3270 博物馆 ——概率DP 高斯消元

    用$F(i,j)$表示A在i,B在j的概率. 然后很容易列出转移方程. 然后可以高斯消元了! 被一个问题困扰了很久,为什么起始点的概率要加上1. (因为其他博客上都是直接写成-1,雾) 考虑初始状态是 ...

  8. BZOJ 3143: [Hnoi2013]游走 [概率DP 高斯消元]

    一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分 ...

  9. 【概率dp 高斯消元】bzoj3270: 博物馆

    一类成环概率dp的操作模式 Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n ...

随机推荐

  1. 如何防御网站被ddos攻击 首先要了解什么是流量攻击

    什么是DDOS流量攻击?我们大多数人第一眼看到这个DDOS就觉得是英文的,有点难度,毕竟是国外的,其实简单通俗来讲,DDOS攻击是利用带宽的流量来攻击服务器以及网站. 举个例子,服务器目前带宽是100 ...

  2. DedeCMS V5.7sp2最新版本parse_str函数SQL注入漏洞

    织梦dedecms,在整个互联网中许多企业网站,个人网站,优化网站都在使用dede作为整个网站的开发架构,dedecms采用php+mysql数据库的架构来承载整个网站的运行与用户的访问,首页以及栏目 ...

  3. Linux命令备忘录:quota显示磁盘已使用的空间与限制

    quota命令用于显示用户或者工作组的磁盘配额信息.输出信息包括磁盘使用和配额限制. 语法 quota(选项)(参数) 选项 -g:列出群组的磁盘空间限制: -q:简明列表,只列出超过限制的部分: - ...

  4. 二维数组快速排序(sort+qsort)

    二维数组快速排序 qsort是c中快速排序,如果简单的一维数组排序,想必大家的懂.现在看一下二维数组的排序,虽然可以冒泡但是太费时间了,我们这里使用qsort来快速排序,看代码应该看得懂吧. 代码: ...

  5. .Net 面试题 汇总(二)

    51..net中读写XML的类都归属于哪些命名空间? 答:System.Xml 52.解释一下UDDI.WSDL的意义及其作用. 答:UDDI即统一描述.发现和集成协议.作用: 用来说明一个Web服务 ...

  6. c/c++ 结构体传参问题

    c/c++的结构体传参可以有三种方式: 1.传递结构体变量,值传递 2.传递结构体指针,地址传递 3.传递结构体成员,可是值传递也可以是地址传递 根据代码示例: 1.传递结构体变量 #include& ...

  7. es同步mysql同步-logstash

    1.下载es https://www.elastic.co/downloads/elasticsearch 修改 config 下elasticsearch.yml   ip和端口等配置 2.下载ki ...

  8. Error loading MySQLdb module: libmysqlclient.so.18: cannot open shared object file: No such file or directory

    在hue上配置Mysql的时候,出现的错误:  发生服务器错误: Error loading MySQLdb module: libmysqlclient.so.18: cannot open sha ...

  9. 程序员编程利器:20款最好的免费的IDEs和编辑器

    程序员编程利器:20款最好的免费的IDEs和编辑器 还没转眼明年可就大年三十了,忙的可真是晕头转了个向,看着亲朋好友们那让人欣羡的小肚腩,不禁感慨,岁月是一把猪饲料,绿了芭蕉,肥了那杨柳小蛮腰,可怜我 ...

  10. C# 获取当前日期当年的周数

    这几天跨年,项目上遇到了一个周数计算的问题. 2016年的元旦是周五开始的,之前系统计算的是属于15年的第53个周,但是年份已经到了16年了. 公司要求从1月1号周五开始算作16年的第一个周,今天1月 ...