[BZOJ1415]聪聪和可可

Input
Output
对于50%的数据,1≤N≤50。
Sample Input
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=;
int n,m,st1,st2;
struct node{int zhong,next;}s[N<<];
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,,sizeof(vis));
q.push(st);pre[st][st]=st;dis[st]=;
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]+)
{
dis[u]=dis[rt]+;
if(rt==st)pre[st][u]=u;
else pre[st][u]=pre[st][rt];
}
else if(dis[u]==dis[rt]+&&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]=,q.push(u);
}
}
}
inline double dp(int st,int ed)
{
if(st==ed)return f[st][ed]=;
int twice=pre[pre[st][ed]][ed];
if(pre[st][ed]==ed||twice==ed)return f[st][ed]=;
if(f[st][ed])return f[st][ed];
double k=1.0/(du[ed]+);
f[st][ed]=k*dp(twice,ed)+;
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=;i<=m;i++)
{
scanf("%d%d",&a,&b);
add(a,b);add(b,a);
du[a]++,du[b]++;
}
for(int i=;i<=n;i++)spfa(i);//用spfa预处理决策pre[i][j]
printf("%.3lf",dp(st1,st2));
}
[BZOJ1415]聪聪和可可的更多相关文章
- 【bzoj1415】 Noi2005—聪聪和可可
http://www.lydsy.com/JudgeOnline/problem.php?id=1415 (题目链接) 题意 一张图,聪聪想吃可可.每单位时间聪聪可以先移动两次:可可后移动一次或停在原 ...
- 【BZOJ1415】【NOI2005】聪聪和可可(动态规划,数学期望)
[BZOJ1415][NOI2005]聪聪和可可(动态规划,数学期望) 题面 BZOJ 题解 先预处理出当可可在某个点,聪聪在某个点时 聪聪会往哪里走 然后记忆化搜索一下就好了 #include< ...
- bzoj1415[NOI2005]聪聪和可可
之前做的一些图上的期望步数的题大多用到高斯消元来求解(HNOI游走,SDOI走迷宫,etc),因此我一开始做这道题的时候想偏了- 这道题的性质:聪聪和可可之间的最短路长度严格递减.因为聪聪总可以多走一 ...
- 【BZOJ1415】 [Noi2005]聪聪和可可 概率与期望
其实题不难,不知提交了几次...不能代码MD...注意一些基本问题...SB概率题 #include <iostream> #include <cstdio> #include ...
- BZOJ1415[Noi2005]聪聪和可可——记忆化搜索+期望dp
题目描述 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...
- 【bzoj1415】[Noi2005]聪聪和可可 期望记忆化搜索
题目描述 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...
- BZOJ1415 [Noi2005]聪聪和可可 【SPFA + 期望dp记忆化搜索】
题目 输入格式 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...
- BZOJ1415 聪聪和可可 —— 期望 记忆化搜索
题目链接:https://vjudge.net/problem/HYSBZ-1415 1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec Memory Limit: 16 ...
- bzoj1415 [Noi2005]聪聪和可可【概率dp 数学期望】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1415 noip2016 D1T3,多么痛的领悟...看来要恶补一下与期望相关的东西了. 这是 ...
随机推荐
- 【代码学习】GD库中简单的验证码
大体思路: 代码部分: <?php //1.创建画布 $img = imagecreatetruecolor(100,30); //2.设置颜色 值越小,颜色越深 $color1 = image ...
- ASP.NET Core实现强类型Configuration读取配置数据
前言 实现读取JSON文件几种方式,在项目中采取老办法简单粗暴,结果老大过来一看,恩,这样不太可取,行吧那我就用.NET Core中最新的方式诺,切记,适合的才是最好的,切勿懒. .NET Core读 ...
- jade模板引擎简明用法
①.特性 首个单词为标签,有一些不能识别的标签可作为code,如each for case if else if unless zen coding风格添加标签,如 .nb#hello 生成 & ...
- H5万能选择器:iosselect
iosselect是个什么东西? 移动端浏览器对于select的展示样式是不一致的,ios下是类似原生的picker,安卓下各浏览器展示各异,我们需要一个选择器组件来统一各端下各种浏览器的展示.下面是 ...
- poj2100还是尺取
King George has recently decided that he would like to have a new design for the royal graveyard. Th ...
- Integer浅谈
别BB,亮代码. 结果: 结果分析: 1.true 相信大家对第一个的比较结果应该不意外,只是单纯的数值比较 2.true 这个和第三个结果一比较起来就感觉迷惑了,明明两个都是同样的赋值方式,为什么一 ...
- hdu1150 Machine Schedule 经典二分匹配题目
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1150 很经典的二分题目 就是求最小点覆盖集 二分图最小点覆盖集=最大匹配数 代码: #include& ...
- hdu3586 Information Disturbing 树形DP+二分
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3586 题目大意:给定n个敌方据点,编号1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值c ...
- Redis入门学习
一.摘要 二.五种数据类型的基本命令操作 三.Redis连接池 四.普通同步方式 五.事务方式(Transactions) 六.管道(Pipelining) 七.管道中调用事务 八.分布式直连同步调用 ...
- ng-checked选择和点击增加dom
1.需求 在添加页面实现一个checkbox的选择,然后在详情页面展示时,会自动选上之前被选中的. 2.添加页面 看官最好将这个代码复制过去看看效果. <!DOCTYPE html>& ...