bzoj 3270 博物馆(高斯消元)
【题意】
两人起始在s,t点,一人pi概率选择留在i点或等概率移动,问两人在每个房间相遇的概率。
【思路】
把两个合并为一个状态,(a,b)表示两人所处的状态,设f[i]为两人处于i状态的概率。则有转移式:
f[(a,b)]=p[a]*a[b]*f[(a,b)]+((1-p[av])/du[av])*p[b]*f[(av,b)]+((1-p[bv]))/du[bv]*p[a]*f[(a,bv)]+ ((1-p[av])/du[av])* ((1-p[bv])/du[bv])*f[(av,bv)]
f[(s,t)]=1+上面的
特殊的,当a==b时,式子为f[(a,a)]=1。
【代码】
#include<set>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define id(i,j) ((i-1)*n+j)
#define trav(u,i) for(int i=front[u];i;i=e[i].nxt)
#define FOR(a,b,c) for(int a=(b);a<=(c);a++)
using namespace std; typedef long long ll;
const int N = ;
const int M = N*N; ll read() {
char c=getchar();
ll f=,x=;
while(!isdigit(c)) {
if(c=='-') f=-; c=getchar();
}
while(isdigit(c))
x=x*+c-'',c=getchar();
return x*f;
} struct Edge {
int v,nxt;
}e[M];
int en=,front[N];
void adde(int u,int v)
{
e[++en]=(Edge){v,front[u]}; front[u]=en;
} int n,m,S,T,du[M];
double a[M][M],p[M]; void gause(int n)
{
for(int i=;i<=n;i++)
{
int r=i;
for(int j=i+;j<=n;j++)
if(fabs(a[j][i])>fabs(a[r][i])) r=j;
for(int j=;j<=n+;j++) swap(a[i][j],a[r][j]);
for(int j=n+;j;j--)
for(int k=i+;k<=n;k++)
a[k][j]-=a[k][i]/a[i][i]*a[i][j];
}
for(int i=n;i;i--)
{
for(int j=i+;j<=n;j++)
a[i][n+]-=a[i][j]*a[j][n+];
a[i][n+]/=a[i][i];
}
} void get_a(int s,int t)
{
int now=id(s,t);
a[now][now]-=;
trav(s,i) trav(t,j)
{
if(e[i].v==e[j].v) continue;
int u=e[i].v,v=e[j].v;
int nxt=id(u,v);
double outu=(-p[u])/du[u],outv=(-p[v])/du[v];
if(u==s&&v==t) a[now][nxt]+=p[u]*p[v];
else if(u==s) a[now][nxt]+=p[u]*outv;
else if(v==t) a[now][nxt]+=p[v]*outu;
else a[now][nxt]+=outu*outv;
}
} int main()
{
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout);
n=read(),m=read(),S=read(),T=read();
int u,v;
FOR(i,,m) {
u=read(),v=read();
adde(u,v),adde(v,u);
du[u]++,du[v]++;
}
FOR(i,,n) scanf("%lf",&p[i]),adde(i,i);
FOR(i,,n) FOR(j,,n)
get_a(i,j);
a[id(S,T)][n*n+]=-;
gause(n*n);
FOR(i,,n)
printf("%.6lf ",a[id(i,i)][n*n+]);
return ;
}
bzoj 3270 博物馆(高斯消元)的更多相关文章
- 【BZOJ-3270】博物馆 高斯消元 + 概率期望
3270: 博物馆 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 292 Solved: 158[Submit][Status][Discuss] ...
- BZOJ3270:博物馆(高斯消元)
Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆.这座博物馆有着特别的样式.它包含由m条走廊连接的n间房间,并且满足可以从任何一 ...
- BZOJ 2419: 电阻 [高斯消元 物理]
http://www.lydsy.com/JudgeOnline/problem.php?id=2419 题意: n个点m个电阻构成一张图,求1到n的等效电阻 第一节课看一道题弃疗,于是来做这道物理题 ...
- BZOJ 2115 DFS+高斯消元
思路: 先搞出来所有的环的抑或值 随便求一条1~n的路径异或和 gauss消元找异或和最大 贪心取max即可 //By SiriusRen #include <cstdio> #inclu ...
- BZOJ 3143 HNOI2013 游走 高斯消元 期望
这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...
- BZOJ 3270: 博物馆 [概率DP 高斯消元]
http://www.lydsy.com/JudgeOnline/problem.php?id=3270 题意:一张无向图,一开始两人分别在$x$和$y$,每一分钟在点$i$不走的概率为$p[i]$, ...
- 「BZOJ 3270」博物馆「高斯消元」
应该算高斯消元经典题了吧. 题意:一个无向连通图,有两个人分别在\(s,t\),若一个人在\(u\),每一分钟有\(p[u]\)的概率不动,否则随机前往一个相邻的结点,求在每个点相遇的概率 题解: 首 ...
- BZOJ 3270 博物馆 ——概率DP 高斯消元
用$F(i,j)$表示A在i,B在j的概率. 然后很容易列出转移方程. 然后可以高斯消元了! 被一个问题困扰了很久,为什么起始点的概率要加上1. (因为其他博客上都是直接写成-1,雾) 考虑初始状态是 ...
- bzoj 3270: 博物馆【dp+高斯消元】
好像是高斯消元解互相推(?)的dp的例子 首先考虑dp,设f[i][j]为一人在i一人在j的概率,点i答案显然就是f[i][i]: 然后根据题意,得到转移是 \[ f[i][j]=f[i][j]*p_ ...
- BZOJ 3270: 博物馆 概率与期望+高斯消元
和游走挺像的,都是将概率转成期望出现的次数,然后拿高斯消元来解. #include <bits/stdc++.h> #define N 23 #define setIO(s) freope ...
随机推荐
- C# 窗体间传值方法大汇总
第一种方法:创建一个类,里面声明用于存储接收的字段.传的时候存储于字段中,要用的时候,直接类名.字段名 进行调用.(这种方法传递是双向的) 第二种方法:1.在Form1里定义 public strin ...
- Cocos2dx+lua中Color参数的坑
cocos2x的lua中有如下几种颜色定义 --Color3B function cc.c3b( _r,_g,_b ) return { r = _r, g = _g, b = _b } end -- ...
- angularjs $watch demo
<!doctype html> <html lang="en" ng-app> <head> <meta charset="UT ...
- eclipse中servers(服务器)的配置
eclipse中servers(服务器)的配置 使用eclipse+tomcat时,很多人喜欢安装tomcat插件,以便一键启动tomcat,但我不喜欢给eclipse安装一些非必须的插件,而ecli ...
- Android Touch(2)View.OnTouchEvent与View.OnTouchListener区别
1,在官方文档 docs/reference/android/view/View.OnTouchListener.html 中对OnTouchListener的描述 Interface definit ...
- 浏览器兼容的css hack
<style> div{ background:green; /* for firefox */ *background:red; /* for IE6 */ } </style&g ...
- 漫游Kafka设计篇之性能优化
Kafka在提高效率方面做了很大努力.Kafka的一个主要使用场景是处理网站活动日志,吞吐量是非常大的,每个页面都会产生好多次写操作.读方面,假设每个消息只被消费一次,读的量的也是很大的,Kafka也 ...
- IOS中UIWebView执行javaScript脚本时注意点
1.webView之所以能够滚动,因为它内部有一个UIScrollView子控件 2.移除webView顶部和底部灰色的一层view * 遍历webView中scrollView内部的所有子控件 * ...
- Activity传递对象的方法
//Serializeable传递对象的方法 public void SerializeMethod(){ Person mPerson = new Person(); mPerson.setName ...
- HDU 3078 Network
简单的 RMQ: 先预处理得到 所有 节点的 公共祖先 和 dfs 得到所有节点的父亲节点: 然后 询问时,从自己出发向上找父亲, 然后 得到所有的节点:排序一下 不知道 这题这样也 ...