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 ...
随机推荐
- 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)
<Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...
- leetcode:Swap Nodes in Pairs
Given a linked list, swap every two adjacent(相邻的) nodes and return its head. For example,Given 1-> ...
- HTML表格标签
table标签的用途: 在表格中放图片,或用于布局(已经淘汰掉了),存放数据 table制作过程: 1.先分析表格有多少行 2.分析有多少列 3.做好表格的基本之后再添加表格需要的一些属性 table ...
- C#操作文件
c# 操作txt文件 # 操作txt文件 c#创建文本 private const string FILE_NAME = "ErroLog.txt"; public static ...
- [ionic开源项目教程] - 第4讲 通Service层获取数据列表
第4讲:通Service层获取数据列表 上一讲中页面的基本架构已完成,这一讲介绍如何通过service层从服务器请求数据,在通过controller层为载体,显示到视图层. 1.在services.j ...
- HDU 1158 Employment Planning
又一次看题解. 万事开头难,我想DP也是这样的. 呵呵,不过还是有进步的. 比如说我一开始也是打算用dp[i][j]表示第i个月份雇j个员工的最低花费,不过后面的思路就完全错了.. 不过这里还有个问题 ...
- HDU 1728 逃离迷宫【BFS】
题意:给出一个起点,一个终点,规定的转弯次数,问能否在规定的转弯次数内到达终点--- 这一题是学(看)习(题)的(解)@_@ 主要学了两个地方 一个是剪枝,如果搜到的当前点的转弯次数小于该点turn数 ...
- 配置openerp的开发环境
给Eclipse安装PyDev插件启用Eclipse————如果前面的步骤都正确无误的话,那么Eclipse就该能够正常启动了.第一次启动会让你选择一个工作空间,按缺省设置,勾选一下不再提醒,就可以了 ...
- 堆Heap
#pragma once#include <vector> // 小堆template<class T> //仿函数struct Less{ bool opera ...
- Localizing Astah – Chinese version(simplified) is now available!
Thanks to Abbey, now GUI in Astah Community can be shown in Chinese. As Abbey created Chinese one, a ...