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 ...
随机推荐
- 数据分析处理库Pandas——常用操作
DataFrame结构排序 备注:group列降序,data列升序. 合并相同项 查找相同项 添加一列,值是其他列的值进行相关操作后的值 删除列 Series结构替换值 一组值按照范围归类 归类后每类 ...
- 分享一个根据具体的日期判断星座的PHP函数
其实原理很简单,也就是把所有的星座月份日期范围存储到一个数组中,然后根据日期判断属于哪个范围,这样就得到是哪个星座了. 下面的这个函数写的比较精炼,可以参考一下 function constellat ...
- POJ2186 强连通分量+缩点
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 40234 Accepted: 16388 De ...
- 在linux使用锐捷客户端上网(华中科技大学)
第一步:下载锐捷客户端linux版本,下载网址为http://ncc.hust.edu.cn/cyxz/rzkhd.htm 第二步:解压该包,进入目录 #unzip RG_Supplicant_For ...
- dfs Gym - 100989L
AbdelKader enjoys math. He feels very frustrated whenever he sees an incorrect equation and so he tr ...
- Spring AOP(一)——基础概念
前文的一些内容更多是针对Spring容器内部的一些特性的描述,接下来一个专题将描述Spring AOP的一些信息,配置细节等等. 介绍 面向切面编程(AOP)是一种新的针对程序结构的思路,它补足了面向 ...
- java二分法来求一个数组中一个值的key
package TestArray; import java.util.Arrays; /** * 二分法查找 */ public class Test { public static void ma ...
- 在Go语言里检测内存泄漏
我们先来设定一下数据库,建立一个MySQL数据库表,名为users,里面有login_name.nickname.uid.password.forbidden几个字段,其中uid与forbidden为 ...
- 网页设计简史看设计&代码“隔膜”
本文来自网易云社区 作者:马宝 设计与代码之间隔膜所在?既然你诚心诚意地问了,我就大发慈悲地告诉你.为了防止地球被破坏,为了维护世界的和平,为了贯彻爱与真实的邪恶~,我是穿梭在前端与设计之间爱与美丽的 ...
- Java日志(二):log4j与XML配置文件
[Java日志(一):log4j与.properties配置文件]一文列举的几个案例以.properties文件作为log4j的配置文件,本文简单看一下log4j与XML配置文件 (1)XML配置文件 ...