题目传送门

题目大意: 给出一张无向图,起点终点为 S,TS,TS,T,聪聪站在起点,可可站在终点,可可每回合随机走 111 步,也可能不动,聪聪则会每回合沿最短路向他走两步,每回合聪聪先走,问聪聪期望走几个回合能追到可可。

题解

基本上是大力模拟。

由于图只有 100010001000 的大小,所以我们可以 O(n2)O(n^2)O(n2) 处理出所有情况下,聪聪沿最短路往可可那里走要怎么走,具体就是求出一个数组 go[i][j]go[i][j]go[i][j],表示聪聪在 iii,可可在 jjj 时,聪聪应该走向哪个点。

这题还有一个性质,就是每一个回合结束中,无论可可怎么走,聪聪与可可之间的距离总是在缩短的。于是我们模拟的时候就可以进行记忆化搜索,记一个 f[i][j]f[i][j]f[i][j] 表示聪聪在 iii,可可在 jjj 时聪聪抓到可可的期望步数,然后枚举可可的每一种走法进行深搜即可。

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 1010int n,m,S,T,du[maxn];
struct edge{int y,next;};
edge e[maxn<<1];
int first[maxn],len=0;
void buildroad(int x,int y)
{e[++len]=(edge){y,first[x]};first[x]=len;
}
int q[maxn],st,ed,dis[maxn];
int go[maxn][maxn];
double f[maxn][maxn];
void bfs(int START)
{st=1,ed=2;q[st]=START;memset(dis,63,sizeof(dis));dis[START]=0;while(st!=ed){int x=q[st++];for(int i=first[x];i;i=e[i].next){int y=e[i].y;if(dis[y]>dis[x]+1){dis[y]=dis[x]+1;q[ed++]=y;}}}for(int i=1;i<=n;i++)if(i!=START)for(int j=first[i];j;j=e[j].next)if(dis[e[j].y]+1==dis[i])go[i][START]=min(go[i][START],e[j].y);
}
double dfs(int s,int t)
{if(f[s][t]!=-1.0)return f[s][t];if(s==t)return f[s][t]=0.0;if(go[s][t]==t||go[go[s][t]][t]==t)return f[s][t]=1.0;f[s][t]=0.0;for(int i=first[t];i;i=e[i].next)f[s][t]+=(dfs(go[go[s][t]][t],e[i].y)+1)/(du[t]+1);f[s][t]+=(dfs(go[go[s][t]][t],t)+1)/(du[t]+1);return f[s][t];
}int main()
{scanf("%d %d %d %d",&n,&m,&S,&T);for(int i=1,x,y;i<=m;i++)scanf("%d %d",&x,&y),du[x]++,du[y]++,buildroad(x,y),buildroad(y,x);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)go[i][j]=999999999,f[i][j]=-1.0;for(int i=1;i<=n;i++)bfs(i);printf("%.3lf",dfs(S,T));
}

NOI 2005 聪聪与可可 题解相关推荐

  1. NOI 2005 聪聪可可

    1784 聪聪与可可 2005年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 题目描述 Description 在一个魔法森林里,住着一只 ...

  2. 题解:luogu P2634 [国家集训队]聪聪可可

    题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头剪刀布就好了,可是他们已 ...

  3. BZOJ2152 聪聪可可 点分治题解

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头剪刀布就好 ...

  4. noi题目P4206 [NOI2005] 聪聪与可可

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

  5. 题解报告——聪聪与可可

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

  6. [题解]bzoj2152 聪聪可可

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头剪刀布就好 ...

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

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

  8. [Noi2005]聪聪和可可

    [Noi2005]聪聪和可可 Time Limit:10000MS  Memory Limit:65536K Total Submit:21 Accepted:14 Description Input ...

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

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

最新文章

  1. 数字汽车钥匙的安全性增强技术
  2. kvm虚拟机--存储池配置梳理(转)
  3. .net与数据库知识点
  4. python第五单元答案_中国大学MOOC第五单元测试答案_数据结构与算法Python版慕课答案在哪里可以看...
  5. P1344-[USACO4.4]追查坏牛奶Pollutant Control【网络流,最小割】
  6. 阿里云python服务器_Python服务器
  7. React简介及基础用法
  8. basic code
  9. linux 后台运行nohup与
  10. 使用Pix For Windows调试Shader傻瓜教程
  11. 深入浅出Java反射机制
  12. 小白Linux入门之:终端复用器Tmux使用参考
  13. Java程序员常用软件
  14. 如何用计算机给机顶盒刷机,如何利用sd卡刷机 电视盒子通用刷机方法
  15. AAA标准-RADIUS协议
  16. Unity 游戏框架搭建 2018 (一) 架构、框架与 QFramework 简介【转自游戏蛮牛】
  17. 【虚拟机VMWare15使用】给虚拟机硬盘添加还原卡//使用物理磁盘做虚拟硬盘
  18. Android 源码编译生成framework.jar
  19. 运营商线路细分_电信运营商如何进行客户细分
  20. 孩子总是偷偷玩游戏,家长该怎么办?

热门文章

  1. Quartus II 功能仿真设置流程
  2. heroes 2 android,真爱英雄2弹性球(Gachi Heroes 2 Flexboll)游戏-Gachi Heroes 2 Flexboll手机版预约-乐游网安卓...
  3. Byr论坛 新增语法高亮功能
  4. JQuery 基础(1)—— 基本介绍、选择器、筛选器(选择器的一种)
  5. W5500常见问题集锦
  6. Cisco Packet Tracer使用方法和路由器基本配置
  7. 定位决定地位---职业程序员未必就是代码民工
  8. 光纤跳线性能测试科普
  9. 编译Android8,【分享】为MPSoC编译Android 8的主要流程和命令
  10. java计算机毕业设计火车订票系统(附源码、数据库)