BZOJ3270:博物馆(高斯消元)
Description
Input
Output
Sample Input
1 2
0.5
0.5
Sample Output
HINT
对于100%的数据有 n <= 20,n-1 <= m <= n(n-1)/2
Solution
虽然是个sb题但是$1A$就很得劲了。因为省的调了
设$ans_{x,y}$表示第一个人在$x$点,第二个人在$y$点的概率。同时设$fx,fy$分别为$x$和$y$的相邻点,$d_i$表示$i$点的度数。
那么就有公式
$ans_{x,y}=p_x\times p_y\times ans_{x,y}$(两个人都停在原地)
$~~~~~~~~~~~~~~+(1-p_x)\times(1-p_y)\times\sum ans_{fx,fy}\times\frac{1}{d_{fx}\times d_{fy}}$(两个人都走)
$~~~~~~~~~~~~~~+p_x\times(1-p_y)\times\sum ans_{x,fy}\times\frac{1}{d_{fy}}$(只有第二个人走)
$~~~~~~~~~~~~~~+(1-p_x)\times p_y\times\sum ans_{fx,y}\times\frac{1}{d_{fx}}$(只有第一个人走)
把每一个$ans_{x,y}$看做一个未知数,然后就可以列出来$n^2$个方程组。高斯消元一下就可以求出来每一个$ans_{x,y}$了。
注意构造矩阵的时候可能状态$(fx,fy)$已经结束了(也就是$fx=fy$)所以不能从那里转移来。
Code
#include<iostream>
#include<cstdio>
#include<cmath>
#define N (409)
using namespace std; struct Node{int x,y;}A[N];
struct Edge{int to,next;}edge[N];
double f[N][N],ans[N],p[N];
int n,m,s,e,u,v,c,id_num,id[N][N];
int head[N],Ind[N],num_edge; void add(int u,int v)
{
Ind[v]++;
edge[++num_edge].to=v;
edge[num_edge].next=head[u];
head[u]=num_edge;
} void Build()
{
for (int i=; i<=c; ++i)
{
int x=A[i].x,y=A[i].y;
if (x!=y) f[i][i]=(-p[x]*p[y]);
else f[i][i]=;
for (int j=head[x]; j; j=edge[j].next)
for (int k=head[y]; k; k=edge[k].next)
{
int fx=edge[j].to,fy=edge[k].to;
if (fx==fy) continue;
f[i][id[fx][fy]]=-1.0/(Ind[fx]*Ind[fy])*(-p[fx])*(-p[fy]);
}
for (int j=head[x]; j; j=edge[j].next)
{
int fx=edge[j].to;
if (fx==y) continue;
f[i][id[fx][y]]=-1.0/(Ind[fx])*(-p[fx])*p[y];
}
for (int j=head[y]; j; j=edge[j].next)
{
int fy=edge[j].to;
if (x==fy) continue;
f[i][id[x][fy]]=-1.0/(Ind[fy])*p[x]*(-p[fy]);
}
if (x==s && y==e) f[i][c+]=;
}
} void Gauss()
{
for (int i=; i<=c; ++i)
{
int num=i;
for (int j=i+; j<=c; ++j)
if (fabs(f[j][i])>fabs(f[num][i])) num=j;
if (num!=i) swap(f[i],f[num]);
for (int j=i+; j<=c; ++j)
{
double t=f[j][i]/f[i][i];
for (int k=i; k<=c+; ++k)
f[j][k]-=t*f[i][k];
}
}
for (int i=c; i>=; --i)
{
for (int j=i+; j<=c; ++j)
f[i][c+]-=f[i][j]*ans[j];
ans[i]=f[i][c+]/f[i][i];
}
} int main()
{
scanf("%d%d%d%d",&n,&m,&s,&e);
for (int i=; i<=m; ++i)
{
scanf("%d%d",&u,&v);
add(u,v); add(v,u);
}
for (int i=; i<=n; ++i)
scanf("%lf",&p[i]);
for (int i=; i<=n; ++i)
for (int j=; j<=n; ++j)
{
id[i][j]=++c;
A[c]=(Node){i,j};
}
Build();
Gauss();
for (int i=; i<=n; ++i)
printf("%.6lf ",ans[id[i][i]]);
}
BZOJ3270:博物馆(高斯消元)的更多相关文章
- 【BZOJ-3270】博物馆 高斯消元 + 概率期望
3270: 博物馆 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 292 Solved: 158[Submit][Status][Discuss] ...
- 【BZOJ3143】【HNOI2013】游走 && 【BZOJ3270】博物馆 【高斯消元+概率期望】
刚学完 高斯消元,我们来做几道题吧! T1:[BZOJ3143][HNOI2013]游走 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小 ...
- 【BZOJ3270】【高斯消元】博物馆
Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n间房间,并且满足可以从任何一 ...
- BZOJ3270 博物馆(高斯消元+概率期望)
将两个人各自所在点视为状态,新建一个图.到达某个终点的概率等于其期望次数.那么高斯消元即可. #include<iostream> #include<cstdio> #incl ...
- BZOJ3270: 博物馆【概率DP】【高斯消元】
Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n间房间,并且满足可以从任何一 ...
- 【概率dp 高斯消元】bzoj3270: 博物馆
一类成环概率dp的操作模式 Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n ...
- bzoj3270 博物馆(期望+高斯消元)
Time Limit: 30 Sec Memory Limit: 128 MB 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的 ...
- [bzoj3270] 博物馆 [期望+高斯消元]
题面 传送门 思路 本题的点数很少,只有20个 考虑用二元组$S=(u,v)$表示甲在$u$点,乙在$v$点的状态 那么可以用$f(S)$表示状态$S$出现的概率 不同的$f$之间的转移就是通过边 转 ...
- BZOJ3270 博物館 概率DP 高斯消元
BZOJ3270 博物館 概率DP 高斯消元 @(XSY)[概率DP, 高斯消元] Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博 ...
随机推荐
- C#关于操作符重载与转换
随便写写 首先,假设我们有一个Person类型 其类型定义如下 class Person { public string Name { get; set; } = "Person" ...
- spark算子集锦
Spark 是大数据领域的一大利器,花时间总结了一下 Spark 常用算子,正所谓温故而知新. Spark 算子按照功能分,可以分成两大类:transform 和 action.Transform 不 ...
- Differences between page and segment
https://techdifferences.com/difference-between-paging-and-segmentation-in-os.html how does paging so ...
- 《深入浅出WPF》读书笔记
依赖属性: 节省实例对内存的开销: 属性值可以通过Binding依赖到其他对象上. WPF中,依赖对象的概念被DependencyObject类实现,依赖属性被DependencyProperty类实 ...
- MySQL语句应该注意的问题
刚刚开始写mysql语句 比较繁琐,乱哄哄的,总结了几点应该注意的事项: 1 注意标点符号,在创建表格 create table的时候 括号里面包含的内容用“,”号分割开,最后一条语句不要加标点符号 ...
- Eclipse 配置 maven 的两个 settings 文件
eclipse配置的settings文件名完全可以自定义,而本机maven只认识settings.xml文件. eclipse里配置maven有一个叫全局的,有一个叫用户的.这两个文件可以和本机mav ...
- Oracle存储过程简单实例
转自 http://www.cnblogs.com/nicholas_f/articles/1526029.html /*不带任何参数存储过程(输出系统日期)*/create or replace p ...
- maven 结合mybaits整合框架,打包时mapper.xml文件,mapper目录打不进war包去问题
首先,来看下MAVENx项目标准的目录结构: 一般情况下,我们用到的资源文件(各种xml,properites,xsd文件等)都放在src/main/resources下面,利用maven打包时,ma ...
- python 事务
事务命令 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 数据库开启事务命令 -- start transaction 开启事务 -- Rollback 回滚事务,即撤 ...
- Week3——书上的分析
1.long before=System.currentTimeMills(); long after=System.currentTimeMills(); 该l两句是分别记录了开始过滤和结 ...