[NOI2005]聪聪与可可(期望dp)

news/2024/9/8 4:08:51/

题意:给一张无向图,有一只猫和一只老鼠,猫每秒会向老鼠的方向移动两个单位,若它们的距离为一,那么只会移动一个单位,老鼠会等概率向周围移动一步或不动,求猫抓到老鼠的期望时间。

Solution
luoguAC第800题。

注意到猫的运动之和猫的位置和老鼠的位置有关,我们可以对其进行预处理,注意若有多种方案的情况会向编号小的点移动。

然后发现猫和老鼠的距离一定是会减小的,不如记录状态进行记忆化搜索,这样转移是不会出现环的。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define N 1002
using namespace std;
queue<int>q;
const double eps=1e-10;
int head[N],dis[N][N],tot,tag[N][N],n,m,s,t;
bool vis[N];
double dp[N][N];
struct zzh{int n,to;
}e[N<<1];
inline void add(int u,int v){e[++tot].n=head[u];e[tot].to=v;head[u]=tot;
}
double dfs(int s,int t){if(dp[s][t]>eps)return dp[s][t];if(s==t)return 0;int ss=tag[s][t];if(ss==t)return 1;ss=tag[ss][t];if(ss==t)return 1;double sum=0,ans=0;for(int i=head[t];i;i=e[i].n)ans+=dfs(ss,e[i].to),sum++;ans+=dfs(ss,t);ans=ans/(sum+1)+1;return dp[s][t]=ans;
}
int main(){scanf("%d%d%d%d",&n,&m,&s,&t);int u,v;for(int i=1;i<=m;++i){scanf("%d%d",&u,&v);add(u,v);add(v,u);}    memset(dis,0x3f,sizeof(dis));memset(tag,0x3f,sizeof(tag));for(int i=1;i<=n;++i){dis[i][i]=0;q.push(i);while(!q.empty()){int u=q.front();q.pop();vis[u]=0;for(int j=head[u];j;j=e[j].n){int v=e[j].to;if(dis[i][v]>dis[i][u]+1){dis[i][v]=dis[i][u]+1;if(!vis[v]){vis[v]=1;q.push(v);}}}}}for(int i=1;i<=n;++i)for(int k=1;k<=n;++k)for(int j=head[i];j;j=e[j].n)if(dis[i][k]==dis[i][e[j].to]+dis[e[j].to][k])tag[i][k]=min(e[j].to,tag[i][k]);printf("%.3lf",dfs(s,t));return 0;
}

 

转载于:https://www.cnblogs.com/ZH-comld/p/9680865.html


http://www.ppmy.cn/news/613791.html

相关文章

oracle如何查询虚拟列,Oracle11g新特性之--虚拟列(VirtualColumn)

Oracle 11g新特性之--虚拟列(Virtual Column) Oracle 11G虚拟列Virtual Column介绍 在老的 Oracle 版本&#xff0c;当我们需要使用表达式或者一些计算公式时&#xff0c;我们会创建数据库视图&#xff0c;如果我们需要在这个视图上使用索引&#xff0c;我们会创建基于函数的索…

国内操作系统OS分析(上)

国内操作系统OS分析&#xff08;上&#xff09; 一&#xff0e;操作系统&#xff08;OS&#xff09;概述 操作系统&#xff08;OS&#xff0c;Operating System&#xff09;&#xff0c;是管理、控制计算机软硬件资源的计算机程序&#xff0c;并为用户提供一个与系统交互的操…

Docker 新手向导

博文目录 文章目录 新手向导 (Get Started)应用程序容器化下载应用代码容器化该应用配置镜像加速器 启动这个应用容器 更新应用程序共享应用程序推送镜像Play with Docker使用镜像 持久化数据库容器的文件系统容器卷 (Container volumes)保留所有数据深入卷 使用绑定装载快速卷…

前端之css引入方式/长度及颜色单位/常用样式

1.css三种引入方式 <!DOCTYPE html><html><head> <meta charset"UTF-8"> <title>三种引入方式</title> <!-- 三种: 行间式 | 内联式 | 外联式 --> 内联式: <!-- <style type"text/css"> div { w…

oracle home 命令,$ORACLE_HOMEbin目录下所有命令的使用方法及命令详解

求$ORACLE_HOME/bin目录下所有命令的使用方法及命令详解如题。$ORACLE_HOME/bin目录下有很多命令&#xff0c;那我们平时用到的也不是太多&#xff0c;即使用到的那部分可能用法也不是完全能掌握&#xff0c;所以还请高人指点解释一下该目录下其他命令的使用奥秘&#xff0c;不…

[USACO Section 3.2] 01串 Stringsobits (动态规划)

题目链接 Solution 贼有意思的 DP, 也可以用组合数学做.\(f[i][j]\) 代表前 \(i\) 位,有 \(j\) 个 \(1\) 的方案数. 转移方程很简单 : \(f[i][j]f[i-1][j]f[i-1][j-1]\) 然后可以按位判断答案上是否为 \(1\) . 如何判断? 如果当前 \(f[i][L]\) 小于 \(I\) ,那么我们所要的方案…

银河麒麟系统安装mysql数据库[mysql-5.7.28-linux-glibc2.12-x86_64]

银河麒麟系统安装mysql数据库 1.1 准备材料 mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz MySQL5.7下载地址 https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz 1.1 安装前准备工作 1、检查是否已经安装MySQL [rootlocalhost ~]# rpm …

oracle没什么没有备份,怎么恢复没有备份的Oracle数据库

数据文件丢失&#xff0c;没有备份&#xff0c;拥有文件创建以来的全部归档&#xff0c;使用RMAN恢复&#xff0c;报错RMAN-06102: no channel to restore a backup or copy of log thread 1 seq 726 scn 1757142927; 使用sqlplus恢复, 执行 Alter Database recover datafile …

小程序--分包加载

分包加载 微信客户端 6.6.0&#xff0c;基础库 1.7.3 及以上版本开始支持。开发者工具请使用 1.01.1712150 及以上版本&#xff0c;可点此下载。 某些情况下&#xff0c;开发者需要将小程序划分成不同的子包&#xff0c;在构建时打包成不同的分包&#xff0c;用户在使用时按需进…

oracle 撤销回退,Oracle 回滚(ROLLBACK)和撤销(UNDO)

五、计算UNDO表空间的大小计算公式&#xff1a;MAX(undoblks)/600 * MAX(maxquerylen)位于v$undostat* db_block_size位于v$parameter--创建演示环境SQL> INSERT INTO tb_test SELECT employee_id,first_name FROM hr.employees;107 rows createdSQL> INSERT INTO tb_tes…

【模拟】不高兴的津津

AC代码 #include <bits/stdc.h> using namespace std; #define ms(a,b) memset(a,b,sizeof(a)) typedef long long ll; inline int read(){int X0,w0; char ch0;while(!isdigit(ch)) {w|ch-;chgetchar();}while(isdigit(ch)) X(X<<3)(X<<1)(ch^48),chgetchar…

图像超分辨率算法:CVPR2020

图像超分辨率算法&#xff1a;CVPR2020 Unpaired Image Super-Resolution using Pseudo-Supervision 论文地址&#xff1a; http://openaccess.thecvf.com/content_CVPR_2020/papers/Maeda_Unpaired_Image_Super-Resolution_Using_Pseudo-Supervision_CVPR_2020_paper.pdf …

oracle insert忽略重复数据,Oracle’INSERT ALL’忽略重复项

在Oracle中,语句要么完全成功要么完全失败(它们是原子的).但是,您可以在某些情况下添加子句来记录异常而不是引发错误&#xff1a;>使用BULK COLLECT – SAVE EXCEPTIONS,如this thread on askTom所示,>或使用DBMS_ERRLOG(我认为10g以后可用).第二种方法都是自动的,这是一…

Codeforces.1051F.The Shortest Statement(最短路Dijkstra)

题目链接 先随便建一棵树。 如果两个点(u,v)不经过非树边&#xff0c;它们的dis可以直接算。 如果两个点经过非树边呢&#xff1f;即它们一定要经过该边的两个端点&#xff0c;可以直接用这两个点到 u,v 的最短路更新答案。 所以枚举每条非树边的两个端点&#xff0c;求一遍这两…

3D目标检测(CVPR2020:Lidar)

3D目标检测&#xff08;CVPR2020&#xff1a;Lidar&#xff09; LiDAR-Based Online 3D Video Object Detection With Graph-Based Message Passing and Spatiotemporal Transformer Attention 论文地址&#xff1a; http://openaccess.thecvf.com/content_CVPR_2020/html/Y…

从加密转型AI:追求可持续性发展还是盲目跟风?

很多批评者曾说&#xff0c;加密行业充斥着流行语&#xff0c;总是在追逐下一个新趋势&#xff0c;甚至会因为过度追求短期利润而忽视了可持续性发展的重要性。在大多数情况下&#xff0c;他们似乎是对的。 上周末&#xff0c;国内最早也是最大的比特币论坛巴比特宣布转型AI赛道…

oracle自增列问题i,关于oracle中自增列问题

昨天去面试&#xff0c;面试官文oracle中有没有自增列&#xff0c;平时没留意&#xff0c;今天查了一下资料&#xff0c;做了个例子。oracle中没有自增列&#xff0c;可以设定, 但手写方法、序列或触发器都可以实现&#xff0c;下面是我实现的一种方法-------------------注释 …

图论题【1】

题意 input 5 1 2 2 3 3 4 4 5 output 1 限制与约定 \(3≤n≤200000\) 题解 如果只放一个点&#xff0c;很显然就是放在直径的中点上面&#xff0c;这样一定是最优的&#xff0c;\[Ans(len(直径)1)/2\]而现在题目要求取两个点&#xff0c; 我们想象在两点路径的中点及其子树到两…

linux删除除某个文件外的其它文件,shell脚本:删除当前目录下除了某几个文件之外的其他文件...

有时会有这种特别的需要&#xff0c;就是删除当前目录下的所有文件&#xff0c;除了几个特别指定的文件。一个特别的应用是&#xff1a;在使用VASP进行计算的时候&#xff0c;常常想要保留4个输入文件&#xff0c;删除剩余的文件。如果没有一个特殊的脚本&#xff0c;那就需要一…

多任务训练的模式结构扩散

多任务训练的模式结构扩散 Pattern-Structure Diffusion for Multi-Task Learning 论文地址&#xff1a; http://openaccess.thecvf.com/content_CVPR_2020/html/Zhou_Pattern- Structure_Diffusion_for_Multi-Task_Learning_CVPR_2020_paper.html 摘要 基于模式结构在任务…