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 ...
随机推荐
- OMAPL138制作SD卡启动介质及重装Linux系统
OMAPL138制作SD卡启动盘及重装Linux系统 手里的创龙的OMAPL138平台的系统SSH坏掉了,我重新移植了openssh还是不好使,没有办法了只能重装OMAPL138的系统了,按照创龙给的 ...
- python中 列表常用的操作
列表可以装大量的数据,不限制数据类型,表示方式:[]:列表中的元素用逗号隔开. lst = [] #定义一个空列表 lst = ["Tanxu",18,"女", ...
- 量化交易之 tushare
作为一名老股民,我对金融市场一直都保持长期的关注. 最近我大量接触量化交易相关的一切,发现市场力量还是蛮强大的,6年前的很多设想现在已经彻底变成现实,不得不承认市场从来不会等任何人.想好就要马上行动, ...
- python 复习函数 装饰器
# 函数 —— 2天 # 函数的定义和调用 # def 函数名(形参): #函数体 #return 返回值 #调用 函数名(实参) # 站在形参的角度上 : 位置参数,*args,默认参数(陷阱),* ...
- (数据科学学习手札15)DBSCAN密度聚类法原理简介&Python与R的实现
DBSCAN算法是一种很典型的密度聚类法,它与K-means等只能对凸样本集进行聚类的算法不同,它也可以处理非凸集. 关于DBSCAN算法的原理,笔者觉得下面这篇写的甚是清楚练达,推荐大家阅读: ht ...
- JAVA大作业汇总3
JAVA大作业3 代码 ``` package thegreatwork; import java.util.; import java.io.; /Board.java 目的:里面有一些关于如何移动 ...
- 【问题记录】Linux Python等交互式输入回退键出现 ^H^H
执行:yum install readline readline-devel
- ResolutionException: Cannot find candidate artifact for com.google.android.gms:play-services-ads-lite:[10.2.4]
I had the same issue and I think it's solved now. Open AdMobDependencies.cs file, located inside of ...
- Linux中java应用程序的部署,使其开机自动启动
初步需求:将在Windows/MyEclipse中开发的java应用程序部署到Linux服务器上,使其运行 针对需求,可以参考下面这些文章,但是这些文章很多东西没有提及到,我自己尝试部署运行 在lin ...
- OpenCV入门:(六:基础画图函数)
有时程序中需要画一些基础的图形,例如直线,矩形,椭圆以及多边形.OpenCV中当然有此类函数. 1.函数介绍 直线line: , , ) img – 图像 pt1 – 直线起点 pt2 – 直线终点 ...