描述


http://www.lydsy.com/JudgeOnline/problem.php?id=3270

\(n\)个房间,刚开始两个人分别在\(a,b\),每分钟在第\(i\)个房间有\(p[i]\)的概率不动,如果动的话,等概率移动到连接的房间,求他们在每个房间相遇的概率.

分析


有点像BZOJ_1778_[Usaco2010_Hol]_Dotp_驱逐猪猡_(期望动态规划+高斯消元+矩阵)那道题.

在那道题里,转移的是炸弹,这道题里,转移的是两个人的状态.

我们把一个甲在\(i\),乙在\(j\)的状态看作是状态\((i-1)n+j\),共\(n种状态\),所以就有\(n^2\)种状态转移.

构造一个\(n^2\times{n^2}\)的矩阵\(f\),\(f[i][j]\)表示从\(i\)状态转移到\(j\)状态的概率.(注意f[i][i]不会再转移)

\(f^n[i][j]\)表示的就是走\(n\)次\(i\to{j}\)的概率.

构造一个行向量\(S={(a-1)n+b=1}\).

这样\(S\times{f^i}\)表示的就是走\(i\)次\((a-1)n+b\to{j}\)的概率.

那么答案行向量$$ans=\sum_{i=0}^{\infty}S\times{f^i}$$

根据等比数列求和公式

$$ans(I-f)=S$$

然后高斯消元,在\(ans\)里面找\((i,i)\)的状态即可.

 #include <bits/stdc++.h>
using namespace std; const int maxn=+,maxm=+;
struct edge{
int to,next;
edge(){}
edge(int to,int next):to(to),next(next){}
}g[maxm];
int n,m,a,b,cnt;
int head[maxn],d[maxn];
double p[maxn],f[maxm][maxm];
inline int P(int x,int y){ return (x-)*n+y; }
void add_edge(int u,int v){
g[++cnt]=edge(v,head[u]); head[u]=cnt;
g[++cnt]=edge(u,head[v]); head[v]=cnt;
}
void gause(int n){
for(int i=;i<=n;i++){
int t=i;
for(int j=i+;j<=n;j++)if(fabs(f[j][i])>fabs(f[t][i])) t=j;
if(t!=i)for(int j=i;j<=n+;j++) swap(f[t][j],f[i][j]);
for(int j=i+;j<=n;j++){
double x=f[j][i]/f[i][i];
for(int k=i;k<=n+;k++) f[j][k]-=f[i][k]*x;
}
}
for(int i=n;i;i--){
for(int j=i+;j<=n;j++) f[i][n+]-=f[i][j]*f[j][n+];
f[i][n+]/=f[i][i];
}
}
int main(){
scanf("%d%d%d%d",&n,&m,&a,&b);
for(int i=;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
d[x]++; d[y]++;
add_edge(x,y);
}
for(int i=;i<=n;i++) scanf("%lf",&p[i]);
for(int x=;x<=n;x++)for(int y=;y<=n;y++){
if(x!=y){
f[P(x,y)][P(x,y)]-=p[x]*p[y];
for(int i=head[x];i;i=g[i].next) f[P(x,y)][P(g[i].to,y)]-=(-p[x])/d[x]*p[y];
for(int i=head[y];i;i=g[i].next) f[P(x,y)][P(x,g[i].to)]-=(-p[y])/d[y]*p[x];
for(int i=head[x];i;i=g[i].next)for(int j=head[y];j;j=g[j].next)
f[P(x,y)][P(g[i].to,g[j].to)]-=(-p[x])/d[x]*(-p[y])/d[y];
}
}
for(int i=;i<=n*n;i++)for(int j=;j<i;j++) swap(f[i][j],f[j][i]);
for(int i=;i<=n*n;i++) f[i][i]+=1.0;
f[P(a,b)][n*n+]=;
gause(n*n);
for(int i=;i<=n;i++) printf("%.6lf ",f[P(i,i)][n*n+]);
return ;
}

3270: 博物馆

Time Limit: 30 Sec  Memory Limit: 128 MB
Submit: 237  Solved: 130
[Submit][Status][Discuss]

Description

有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博物馆。这座博物馆有着特别的样式。它包含由m条走廊连接的n间房间,并且满足可以从任何一间房间到任何一间别的房间。
两个人在博物馆里逛了一会儿后两人决定分头行动,去看各自感兴趣的艺术品。他们约定在下午六点到一间房间会合。然而他们忘记了一件重要的事:他们并没有选好在哪儿碰面。等时间到六点,他们开始在博物馆里到处乱跑来找到对方(他们没法给对方打电话因为电话漫游费是很贵的)
不过,尽管他们到处乱跑,但他们还没有看完足够的艺术品,因此他们每个人采取如下的行动方法:每一分钟做决定往哪里走,有Pi
的概率在这分钟内不去其他地方(即呆在房间不动),有1-Pi
的概率他会在相邻的房间中等可能的选择一间并沿着走廊过去。这里的i指的是当期所在房间的序号。在古代建造是一件花费非常大的事,因此每条走廊会连接两个
不同的房间,并且任意两个房间至多被一条走廊连接。
两个男孩同时行动。由于走廊很暗,两人不可能在走廊碰面,不过他们可以从走廊的两个方向通行。(此外,两个男孩可以同时地穿过同一条走廊却不会
相遇)两个男孩按照上述方法行动直到他们碰面为止。更进一步地说,当两个人在某个时刻选择前往同一间房间,那么他们就会在那个房间相遇。
两个男孩现在分别处在a,b两个房间,求两人在每间房间相遇的概率。

Input

第一行包含四个整数,n表示房间的个数;m表示走廊的数目;a,b (1 ≤ a, b ≤ n),表示两个男孩的初始位置。
之后m行每行包含两个整数,表示走廊所连接的两个房间。
之后n行每行一个至多精确到小数点后四位的实数 表示待在每间房间的概率。
题目保证每个房间都可以由其他任何房间通过走廊走到。

Output

输出一行包含n个由空格分隔的数字,注意最后一个数字后也有空格,第i个数字代表两个人在第i间房间碰面的概率(输出保留6位小数)
注意最后一个数字后面也有一个空格

Sample Input

2 1 1 2
1 2
0.5
0.5

Sample Output

0.500000 0.500000

HINT

对于100%的数据有 n <= 20,n-1 <= m <= n(n-1)/2

Source

BZOJ_3270_博物馆_(高斯消元+期望动态规划+矩阵)的更多相关文章

  1. Codeforces 446D - DZY Loves Games(高斯消元+期望 DP+矩阵快速幂)

    Codeforces 题目传送门 & 洛谷题目传送门 神仙题,%%% 首先考虑所有格子都是陷阱格的情况,那显然就是一个矩阵快速幂,具体来说,设 \(f_{i,j}\) 表示走了 \(i\) 步 ...

  2. BZOJ_1923_[Sdoi2010]外星千足虫_高斯消元+bitset

    BZOJ_1923_[Sdoi2010]外星千足虫_高斯消元 Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结 ...

  3. BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元

    BZOJ_3503_[Cqoi2014]和谐矩阵_高斯消元 题意: 我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1.一个元素相邻的元素包括它本身,及他上下左右的4个元素(如果 ...

  4. HDU2262;Where is the canteen(高斯消元+期望)

    传送门 题意 给出一张图,LL从一个点等概率走到上下左右位置,询问LL从宿舍走到餐厅的步数期望 分析 该题是一道高斯消元+期望的题目 难点在于构造矩阵,我们发现以下结论 设某点走到餐厅的期望为Ek 1 ...

  5. 【BZOJ3143】【HNOI2013】游走 && 【BZOJ3270】博物馆 【高斯消元+概率期望】

    刚学完 高斯消元,我们来做几道题吧! T1:[BZOJ3143][HNOI2013]游走 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小 ...

  6. HDU4870_Rating_双号从零单排_高斯消元求期望

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4870 原题: Rating Time Limit: 10000/5000 MS (Java/Other ...

  7. BZOJ3270 博物馆(高斯消元+概率期望)

    将两个人各自所在点视为状态,新建一个图.到达某个终点的概率等于其期望次数.那么高斯消元即可. #include<iostream> #include<cstdio> #incl ...

  8. BZOJ 3143 HNOI2013 游走 高斯消元 期望

    这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...

  9. 洛谷P3232 [HNOI2013]游走(高斯消元+期望)

    传送门 所以说我讨厌数学……期望不会高斯消元也不会……好不容易抄好了高斯消元板子被精度卡成琪露诺了…… 首先,我们先算出走每一条边的期望次数,那么为了最小化期望,就让大的期望次数乘上小编号 边的期望次 ...

随机推荐

  1. sgu 107 987654321 problem

    其实挺水的,因为两个数平方,只有固定的后面几位数会影响到最后结果的后面几位数.也就是说,如果想在平方之后尾数为987654321,那么就有固定的几个尾数在平方后会是这个数,打个表,发现 10^8 内 ...

  2. svn 钩子 post-commit 出现255错误解决办法

    首先检查代码中是否有可执行命令 #!/bin/sh 然后 检查post-commit权限 post-commit 脚本文件的权限不对,post-commit 脚本必须有 +x 权限. chown sv ...

  3. NodeJS较高版本对connect支持的问题

    在nodejs中引入connect后,构建应用的代码如下 var connect = require('connect'); var server = connect.createServer(); ...

  4. 网页中"IE限制网页访问脚本或ActiveX控件"的提示问题的解决方法

    以前从来没有注意过"IE限制网页访问脚本或ActiveX控件"的提示问题,对于这个小细节问题,虽然感觉很别扭,但一直没考虑解决方法,今天才发现该问题可以轻松解决,以下做个小小记录. ...

  5. css实现div块半透明

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. mysql Error Handling and Raising in Stored Procedures

    MySQL的存储过程错误捕获方式和Oracle的有很大的不同. MySQL中可以使用DECLARE关键字来定义处理程序.其基本语法如下: DECLARE handler_type HANDLER FO ...

  7. Python prettytable的使用方法

    Python prettytable的使用方法 prettytable可以整齐地输出一个表格信息: +-----------+------+------------+----------------- ...

  8. 【java】Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 标签

    摘录某个工程的 web.xml 文件片段: 访问顺序为1—>2—>3—>4,其中2和3的值必须相同. url-pattern 标签中的值是要在浏览器地址栏中输入的 url,可以自己命 ...

  9. MVC 4 网页版发送 邮件的配置问题

    有时项目要用到邮箱验证就要发送邮件传统的解决方案: public void SendResetPasswordEmail(string email) { MailAddress from = new ...

  10. Burp Suite Walkthrough(英文版)

    Burp Suite is one of the best tools available for web application testing. Its wide variety of featu ...