BZOJ 3270 博物馆 && CodeForces 113D. Museum 期望概率dp 高斯消元
大前提,把两个点的组合看成一种状态 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 高斯消元的更多相关文章
- LightOJ - 1151概率dp+高斯消元
概率dp+高斯消元 https://vjudge.net/problem/LightOJ-1151 题意:刚开始在1,要走到100,每次走的距离1-6,超过100重来,有一些点可能有传送点,可以传送到 ...
- BZOJ3270 博物館 概率DP 高斯消元
BZOJ3270 博物館 概率DP 高斯消元 @(XSY)[概率DP, 高斯消元] Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博 ...
- 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)条由两 ...
- BZOJ 3270: 博物馆 [概率DP 高斯消元]
http://www.lydsy.com/JudgeOnline/problem.php?id=3270 题意:一张无向图,一开始两人分别在$x$和$y$,每一分钟在点$i$不走的概率为$p[i]$, ...
- 【BZOJ3640】JC的小苹果 概率DP+高斯消元
[BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话说JC历经艰辛来到了城市B,但 ...
- BZOJ 3270 博物馆 ——概率DP 高斯消元
用$F(i,j)$表示A在i,B在j的概率. 然后很容易列出转移方程. 然后可以高斯消元了! 被一个问题困扰了很久,为什么起始点的概率要加上1. (因为其他博客上都是直接写成-1,雾) 考虑初始状态是 ...
- BZOJ 3143: [Hnoi2013]游走 [概率DP 高斯消元]
一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分 ...
- 【概率dp 高斯消元】bzoj3270: 博物馆
一类成环概率dp的操作模式 Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n ...
随机推荐
- 使用C6748和C5509A对nRF24L01驱动进行数据传输
1. 写在前面 今天下午做了一个C5509A和C6748两个DSP的数据传输,经由RF24L01设备传输,都是模拟SPI协议,对于两个DSP来说,无非是配GPIO引脚,写好时序和延时.C5509A的G ...
- Python基础03
while循坏while属于条件判断 条件满足====>执行 条件不满足====>退出循环 whlie循环格式 while 条件 : 执行语句 while 1 == 1: print(&q ...
- windows环境下,用python绘图库matplotlib绘图时中文乱码问题
1.下载中文字体(看自己爱好就行)下面这个举例: SimHei - Free Font Downloadwww.fontpalace.co 2.下载之后,打开即可安装,将字体安装进windows系统 ...
- print(__file__)返回<encoding error>的问题
今天写了一下代码,本来是想得到当前文件的上面三层的目录的,结果返回的却是错误 import os import sys print(__file__) # 得到上上层目录的路径之后,加入到默认的环境变 ...
- Leecode刷题之旅-C语言/python-101对称二叉树
/* * @lc app=leetcode.cn id=101 lang=c * * [101] 对称二叉树 * * https://leetcode-cn.com/problems/symmetri ...
- java doc 编写
总而言之,我觉得有用的是: @see 只要敲了@see 然后会自动写你的类名的,很方便.# 去连接字段 {@link } 只要敲了{@link } 然后会自动写你的类名的,很方便.# 去连接字段 如果 ...
- python os模块atime ,ctime,mtime意义
ython的os.stat中主要的时间信息有三个:st_mtime,st_atime,st_ctime. 1.st_mtime:time of last modification 最后一 ...
- abtest-system后台系统设计与搭建
本文来自网易云社区 作者:刘颂 1 项目背景: 2017年5月:客户端提出增加https&dns以及双cdn业务功能 后台配合实现使用disconf配置 针对不同的域名或者请求配置不同的htt ...
- 4,由spring展开的串烧
一.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...
- C++重载赋值操作符
1.C++中重载赋值操作函数应该返回什么? 类重载赋值操作符一般都是作为成员函数而存在的,那函数应该返回什么类型呢?参考内置类型的赋值操作,例如 int x,y,z; x=y=z=15; 赋值行为相当 ...