Input

数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数。 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号。 接下来E行,每行两个整数,第i+2行的两个整数Ai和Bi表示景点Ai和景点Bi之间有一条路。 所有的路都是无向的,即:如果能从A走到B,就可以从B走到A。 输入保证任何两个景点之间不会有多于一条路直接相连,且聪聪和可可之间必有路直接或间接的相连。

Output

输出1个实数,四舍五入保留三位小数,表示平均多少个时间单位后聪聪会把可可吃掉。
对于所有的数据,1≤N,E≤1000。
对于50%的数据,1≤N≤50。

Sample Input

9 9
9 3
1 2
2 3
3 4
4 5
3 6
4 6
4 7
7 8
8 9

Sample Output

2.167

题解:

本题是一道难度适中的概率dp,其实坑点误区全部在读题上.

首先,要注意"第一步没走到,可以再走一步";其次,还有"距离相等时走编号较小的点".

前者保证猫一定追的上老鼠,后者则是一个决策的限制,让我们不能瞎跑题目变的难了

既然有这个限制,n也很小,我们就可以考虑打个表预处理

设du[i]为每个点的度

对于猫在i点,鼠在j点的情况,设pre[i][j]为猫下一步到达的节点(即决策点)

再设twice为猫走第一步到pre[i][j]没捉到鼠第二步的决策,则twice=pre[pre[i][j]][j]

那么有如下情况:

1°i==j:f[i][j]=0;

2°pre[i][j]==j||twice==j:f[i][j]=1;

如果1°2°均不满足,则

3°f[i][j]=(f[twice][j]+sigma{f[twice][k],j和k间有连边}/(du[j]+1)+1

这样本题就被解决啦,方式当然是记忆化搜索

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int N=1010;
int n,m,st1,st2;
struct node{int zhong,next;}s[N<<1];
int e,adj[N],du[N],pre[N][N];
inline void add(int qi,int zhong){s[++e].zhong=zhong;s[e].next=adj[qi];adj[qi]=e;}
double f[N][N];
inline int spfa(int st)
{queue<int>q;int dis[N];bool vis[N];memset(dis,0x7f,sizeof(dis));memset(vis,0,sizeof(vis));q.push(st);pre[st][st]=st;dis[st]=0;while(!q.empty()){int rt=q.front();q.pop();for(int i=adj[rt];i;i=s[i].next){int u=s[i].zhong;if(dis[u]>dis[rt]+1){dis[u]=dis[rt]+1;if(rt==st)pre[st][u]=u;else pre[st][u]=pre[st][rt];}else if(dis[u]==dis[rt]+1&&pre[st][u]>pre[st][rt]){if(rt==st)pre[st][u]=u;else pre[st][u]=pre[st][rt];}if(!vis[u])vis[u]=1,q.push(u);}}
}
inline double dp(int st,int ed)
{if(st==ed)return f[st][ed]=0;int twice=pre[pre[st][ed]][ed];if(pre[st][ed]==ed||twice==ed)return f[st][ed]=1;if(f[st][ed])return f[st][ed];double k=1.0/(du[ed]+1);f[st][ed]=k*dp(twice,ed)+1;for(int i=adj[ed];i;i=s[i].next){int u=s[i].zhong;f[st][ed]+=k*dp(twice,u);}return f[st][ed];
}
int main()
{scanf("%d%d%d%d",&n,&m,&st1,&st2);int a,b;for(int i=1;i<=m;i++){scanf("%d%d",&a,&b);add(a,b);add(b,a);du[a]++,du[b]++;}for(int i=1;i<=n;i++)spfa(i);//用spfa预处理决策pre[i][j] printf("%.3lf",dp(st1,st2));
}

转载于:https://www.cnblogs.com/LadyLex/p/Skyminer.html

[BZOJ1415]聪聪和可可相关推荐

  1. BZOJ1415 [Noi2005]聪聪和可可 【SPFA + 期望dp记忆化搜索】

    题目 输入格式 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...

  2. BZOJ1415[Noi2005]聪聪和可可——记忆化搜索+期望dp

    题目描述 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...

  3. BZOJ1415【NOI2005】聪聪和可可

    题目描述 在一个魔法森林里,住着一只聪明的小猫聪聪和一只可爱的小老鼠可可.虽 然灰姑娘非常喜欢她们俩,但是,聪聪终究是一只猫,而可可终究是一只老鼠, 同样不变的是,聪聪成天想着要吃掉可可. 一天,聪聪 ...

  4. 【题解】bzoj-1415 NOI-2005 聪聪与可可

    Problem Luogu&bzoj Solution 这题一看就联想起了HNOI游走那道题,仔细一看发现不对 发现这题的转移是有终点的,所以可以用Dp,加上题目是一张图,推荐用记忆化搜索 显 ...

  5. bzoj1415 noi2005 聪聪和可可 期望

    本来毫无思路,看到网上设了二维数组表示期望后,觉得很妙. 设f[i][j]为聪聪在i,可可在j的聪聪吃到可可的时间期望. dis[i][j]==1 ||==2 时,f[i][j]=1 ,i==j 时, ...

  6. 【BZOJ1415】【NOI2005】聪聪和可可(动态规划,数学期望)

    题面 BZOJ 题解 先预处理出当可可在某个点,聪聪在某个点时 聪聪会往哪里走 然后记忆化搜索一下就好了 #include<iostream> #include<cstdio> ...

  7. bzoj1415 [Noi2005]聪聪和可可【概率dp 数学期望】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1415 noip2016 D1T3,多么痛的领悟...看来要恶补一下与期望相关的东西了. 这是 ...

  8. BZOJ 2152 「国家集训队」聪聪可可(点分治)【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2152 是 hydro 的 BZOJ ...

  9. 【BZOJ 1415】 1415: [Noi2005]聪聪和可可 (bfs+记忆化搜索+期望)

    1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1640  Solved: 962 Description ...

最新文章

  1. 详解Python中的循环的几个类型
  2. 乘法器专题研究(内含所有类型乘法器)
  3. [SpringBoot2]@MatrixVariableUrlPathHelper
  4. 用c#编写爬虫在marinetraffic下载船仅仅图片
  5. 基于多源文档片段的神经网络排序模型(Neural Ranking Models with Multiple Document Fields)
  6. c语言标准函数库怎么建立教程,C语言入门教程-创建一个函数库
  7. 测试环境搭建mysql数据库_软件测试环境的搭建系列:[2] MySQL数据库的安装
  8. find命令_用find命令查找文件目录
  9. CAD/CASS城市坐标转换到CGCS2000(不涉及参数计算)
  10. 数据结构-------图(最通俗易懂的文章)(一)图的数据结构及其遍历
  11. php公网不能访问8080,linux启动tomcat外部浏览器不能访问8080端口解决方案
  12. @Retryable和@Recover的使用
  13. unity怎么制作云飘动_Unity Shader教程之 旗帜飘扬效果的简单实现
  14. bibtex 共生_游戏与音乐的共生
  15. 一、<a>标签如何实现下载
  16. 郭逸淵:4月6日比特幣(BTC)以太坊(ETH)行情分析及布局思路
  17. 引流产品分几类?引流产品结构四类定位产品
  18. 支持向量机鸢尾花Iris数据集的SVM线性分类练习
  19. JS、阻止 a 标签的默认点击事件,阻止默认的所有事件
  20. MPLS OPTION-C方案一

热门文章

  1. matlab 发微信,微信红包算法MATLAB实现
  2. mysql语句没出错一直抱错_为什么我的mysql语句一直报错,找不到错误,望各位大佬指点一番...
  3. java读取配置文件properties_让我来告诉你Spring框架是怎么样通过properties来获得对象的?...
  4. 走近算法:受众行为分析与人群定向
  5. 已触发了一个断点 vs_实现ABAP条件断点的三种方式
  6. php无法查询excel数据,laravel phpexcel无法读取excel中中文表头列数据
  7. 人工智能语言python招聘_编程语言这么多为什么选Python
  8. 前景检测算法(十三)--KDE2000
  9. docker_3 docker 部署练习
  10. yum repolist命令