BZOJ 3270: 博物馆

传送门

显然可以状态转移:

设 $f[k][x][y]$ 表示第 $k$ 时刻,第一个人在 $x$ ,第二个人在 $y$ 时的概率

那么转移显然:

$f[k][x][y]+=\sum_{u}\sum_{v}f[k-1][u][v]*(1-P_u)(1-P_v)/du[u]/du[v]$

其中 $u$ 和 $x$ 有边相连,$v$ 和 $y$ 有边向连,$du[i]$ 表示节点 $i$ 的度数,并且 $u!=v$

当然这只是一种情况的转移,还有三种情况:

$f[k][x][y]+=\sum_{u}f[k-1][u][y]*(1-P_u)P_y/du[u]$

$f[k][x][y]+=\sum_{v}f[k-1][x][v]*(1-P_v)P_x/du[v]$

$f[k][x][y]+=f[k-1][x][y]*P_x*P_y$

然后显然可以矩阵优化暴力转移 ,复杂度 $O(n^6log_k)$,$k$ 是转移步数,精度玄学

正解是考虑设 $f[x][y]$ 表示两人从起点到终点,经过状态 $(x,y)$ 即第一个人在 $x$,第二个人在 $y$ 的期望次数

状态转移的方程好像也差不多

$f[x][y]+=\sum_{u}\sum_{v}f[u][v]*(1-P_u)(1-P_v)/du[u]/du[v]$

$f[x][y]+=\sum_{u}f[u][y]*(1-P_u)P_y/du[u]$

 

$f[x][y]+=\sum_{v}f[x][v]*(1-P_v)P_x/du[v]$

 

$f[x][y]+=f[x][y]*P_x*P_y$

因为两人在同一个点时就不会继续走了,所以从起点出发两人在 $i$ 点相遇的概率就是两人从起点到终点,经过状态 $(i,i)$ 的期望次数($f[i][i]$)

这个方程转移有环,可以列出所有转移方程然后用高斯消元解方程组

复杂度 $O(n^6)$

 

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
typedef double db;
inline int read()
{int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }return x*f;
}
const int N=507;
int fir[N],from[N<<1],to[N<<1],cntt;
inline void add(int a,int b) { from[++cntt]=fir[a],fir[a]=cntt,to[cntt]=b; }
int n,m,nn,pa,pb,id[N][N],du[N];
db P[N],A[N][N],ans[N];
void Gauss()//高斯消元解方程组
{int pos;for(int i=1;i<=nn;i++){pos=0;for(int j=i;j<=nn;j++) if(fabs(A[j][i])>fabs(A[pos][i])||!pos) pos=j;swap(A[i],A[pos]);for(int j=i+1;j<=nn;j++){db w=A[j][i]/A[i][i];for(int k=i;k<=nn+1;k++) A[j][k]-=w*A[i][k];}}for(int i=nn;i;i--){for(int j=i+1;j<=nn;j++) A[i][nn+1]-=ans[j]*A[i][j];ans[i]=A[i][nn+1]/A[i][i];}
}
int main()
{n=read(),m=read(),pa=read(),pb=read();nn=n*n; int now=0,a,b;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) id[i][j]=++now;for(int i=1;i<=m;i++){a=read(),b=read();add(a,b); add(b,a);du[a]++; du[b]++;}for(int i=1;i<=n;i++) scanf("%lf",&P[i]);for(int i=1;i<=n;i++)//枚举ufor(int j=1;j<=n;j++)//枚举v
        {if(i==j) continue;//注意如果i=j就不能转移for(int k=fir[i];k;k=from[k])//枚举xfor(int l=fir[j];l;l=from[l])//枚举yA[ id[to[k]][to[l]] ][id[i][j]]-=(1.0-P[i])*(1.0-P[j])/du[i]/du[j];for(int k=fir[i];k;k=from[k]) A[ id[to[k]][j] ][id[i][j]]-=(1.0-P[i])*P[j]/du[i];for(int k=fir[j];k;k=from[k]) A[ id[i][to[k]] ][id[i][j]]-=(1.0-P[j])*P[i]/du[j];A[id[i][j]][id[i][j]]-=P[i]*P[j];//构造矩阵
        }for(int i=1;i<=nn;i++) A[i][i]++;A[id[pa][pb]][nn+1]=1;//起点初始为1
    Gauss();for(int i=1;i<=n;i++) printf("%.6lf ",ans[id[i][i]]);return 0;
}

 

转载于:https://www.cnblogs.com/LLTYYC/p/10837689.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

graphpad7.04多组比较p值_同是折线图为何你却这么优秀,这才是多组数据作图应该有的样子...

相信大家对Excel做折线图应该不陌生&#xff0c;在展示数据的时候&#xff0c;图表是一种最好的展示方法。但是经常会碰到一种尴尬的事情就是&#xff0c;当数据维多比较多的时候&#xff0c;做出的图表就会显得非常难看。今天我们就来学习一下&#xff0c;多组数据怎么做折线图…

Logic-算法-八个箱子找一个最轻的

ylbtech-Arithmetic:Logic-算法-八个箱子找一个最轻的-- -- ylb&#xff1a;算法-- Type:算法[logic]-- munu:八个箱子-找一个最轻的-- thankyou:gaoZhimin -- 7:11 2012/3/17-- 有八个正方形的箱子&#xff0c;外观大小都一样&#xff0c;其中七个是50斤的&#xff0c;一个是…

由衷的信来激励有抱负的开发人员

by Logan Wright洛根赖特(Logan Wright) 由衷的信来激励有抱负的开发人员 (A heartfelt letter to inspire the aspiring developer) I’m writing a letter to my friend. You should read it. He studies Computer Science, and he hates it. I build React Apps and I love…

linux 运行 chom,Hadoop安装-单节点/伪分布(2.7.3)

1&#xff0c;下载Hadoop目前在Ubuntu的软件库里面 没有发现Hadoop的压缩包&#xff0c;没猜错Hadoop不是可执行文件 只是一个压缩包吧&#xff01;所以我们只能自己到官网下载(http://hadoop.apache.org/releases.html)&#xff1b;在Apache社区中&#xff0c;下载软件的时候…

leetcode944. 删列造序

给定由 N 个小写字母字符串组成的数组 A&#xff0c;其中每个字符串长度相等。 你需要选出一组要删掉的列 D&#xff0c;对 A 执行删除操作&#xff0c;使 A 中剩余的每一列都是 非降序 排列的&#xff0c;然后请你返回 D.length 的最小可能值。 删除 操作的定义是&#xff1…

python学习:re模块

常用正则表达式符号 123456789101112131415161718192021. 默认匹配除\n之外的任意一个字符&#xff0c;若指定flag DOTALL,则匹配任意字符&#xff0c;包括换行^ 匹配字符开头&#xff0c;若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee&qu…

app之---豆果美食

1.抓包 2.代码 抓取&#xff1a; #!/usr/bin/env python # -*- coding: utf-8 -*- #author tom import requests from multiprocessing import Queue from handle_pymongo import mongo from concurrent.futures import ThreadPoolExecutorclass Douguo():def __init__(self):s…

语言坐标度分秒的换算_测量位置度说明

测量位置度说明位置度是限制被测要素的实际位置对理想位置变动量的指标。它的定位尺寸为理论正确尺寸。位置度公差在评定实际要素位置的正确性, 是依据图样上给定的理想位置。位置度包括点的位置度、线的位置度和面的位置度。[1] 点的位置度:如公差带前加S&#xffe0;&#xf…

OpenStack创建win7实例遇到的问题(尚未解决,求帮助)

原地址在这里&#xff1a;&#xff08;作者也是我&#xff0c;害羞&#xff09;http://www.aboutyun.com/forum.php?modviewthread&tid22898 小白经过两天尝试&#xff0c;用fuel部署好了OpenStack的云平台&#xff0c;接下来想在Compute节点上创建一个win7 实例&#xff…

VMware使两台windows虚拟机能够互相ping通

如果以下内容测试无效&#xff0c;可参考另一篇&#xff1a;VMware虚拟机配置内网电脑能访问 1.关闭防火墙 cmd命令行里输入&#xff1a;netsh firewall set opmode disable 2.测试如果还不能ping通&#xff0c;就把网络类型选nat类型 3.测试&#xff1a;vmware网关默认是.2 转…

linux账号前有个base,安装 aconda 后Linux的终端界面前部出现(base)字样

aconda 是做什么用的这里就不说了&#xff0c;一般玩Python的都知道这东西&#xff0c;最早接触这东西是因为它把NVIDIA中cuda计算和Python互连的一个库拿下了&#xff0c;是买下来了还是专业&#xff0c;还是唯一合作的也就记不清了&#xff0c;那就是 numba , 那些年头Python…

回复邮件时如何不要邮件头_如何为阅读,点击和回复率达到100%的CEO设计一封冷邮件...

回复邮件时如何不要邮件头by Theo Strauss由西奥斯特劳斯(Theo Strauss) 如何为阅读&#xff0c;点击和回复率达到100&#xff05;的CEO设计一封冷邮件 (How to design a cold email for a CEO with a 100% read, click, and response rate) 银河电子邮件指南&#xff1a;第二…

leetcode1007. 行相等的最少多米诺旋转(贪心)

在一排多米诺骨牌中&#xff0c;A[i] 和 B[i] 分别代表第 i 个多米诺骨牌的上半部分和下半部分。&#xff08;一个多米诺是两个从 1 到 6 的数字同列平铺形成的 —— 该平铺的每一半上都有一个数字。&#xff09; 我们可以旋转第 i 张多米诺&#xff0c;使得 A[i] 和 B[i] 的值…

Spring 学习教程(一): 认识 Spring 框架

Spring 框架是 Java 应用最广的框架&#xff0c;它的成功来源于理念&#xff0c;而不是技术本身&#xff0c;它的理念包括 IoC (Inversion of Control&#xff0c;控制反转) 和 AOP(Aspect Oriented Programming&#xff0c;面向切面编程)。 Spring 的框架结构 Data Access/Int…

小米网关控制空调伴侣_小米有品上架移动空调,支持语音控制

近日小米有品商城上架了一款互联网可移动空调&#xff0c;机身仅有小米空气净化器一般大小&#xff0c;底部安装了万向轮&#xff0c;支持多方位自由移动&#xff0c;拥有三大功能&#xff0c;兼顾去暑除湿能力&#xff0c;产品售价1599元&#xff0c;有需求的用户可以在小米有…

错误: 找不到符号

Error:(31, 29) 错误: 找不到符号 符号: 类 OnLaunchPluginCallback 位置: 类 IreaderPlugApi 明明我都可以ctrl 单击点过去&#xff0c;但是就是运行的时候报错。说错误: 找不到符号。 我试了两遍&#xff0c;把工程clearn, 删除build下面的文件夹&#xff0c;弄了两遍&am…

leetcode910. 最小差值 II(贪心)

给定一个整数数组 A&#xff0c;对于每个整数 A[i]&#xff0c;我们可以选择 x -K 或是 x K&#xff0c;并将 x 加到 A[i] 中。 在此过程之后&#xff0c;我们得到一些数组 B。 返回 B 的最大值和 B 的最小值之间可能存在的最小差值。 示例 1&#xff1a; 输入&#xff1…

laravel 检测sql_在Laravel PHP应用程序中轻松进行面部检测

laravel 检测sqlby Darren Chowles达伦乔尔斯(Darren Chowles) 在Laravel PHP应用程序中轻松进行面部检测 (Easy facial detection in your Laravel PHP application) 使用Google Cloud Vision API检测图像中的人脸 (Detect faces in images using the Google Cloud Vision AP…

mysql学习笔记-insert扩展

1、创建表 -利用已有表&#xff0c;创建表 这样创建的缺点-- 主键会丢失 -- 创建表&#xff0c;表结构与数据与t_emptest 一致 CREATE TABLE t_emptest1 AS SELECT * FROM t_emptest ;-- 创建空表&#xff0c;表结构与t_emptest 一致 CREATE TABLE t_emptest1 AS SELECT * FRO…

linux 调用外部变量,sed当中使用变量替换以及执行外部命令

转自&#xff1a;http://blog.csdn.net/linwhwylb/article/details/7184748在使用sed对日志或者其它文本进行parse的过程当中&#xff0c;有时候我们需要引用外部变量的值&#xff0c;或者获取一个shell命令执行的结果&#xff0c;以便达到更加可观的输出结果。这里介绍如何做到…