传送门

##解题思路
  还是比较简答的一道题。首先$bfs$把每个点到其他点的最短路求出来,然后再记忆化搜索。记搜的时候猫的走法是确定的,搜一下老鼠走法就行了。

##代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue> using namespace std;
const int MAXN = 1005; inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return f?x:-x;
} int n,m,head[MAXN],cnt,dis[MAXN][MAXN],to[MAXN<<1],nxt[MAXN<<1],S,T,du[MAXN];
double ans,f[MAXN][MAXN];
bool vis[MAXN];
queue<int> Q; inline void add(int bg,int ed){
to[++cnt]=ed,nxt[cnt]=head[bg],head[bg]=cnt;
} inline void bfs(int id){
memset(vis,false,sizeof(vis));
dis[id][id]=0;Q.push(id);vis[id]=1;int x,u;
while(Q.size()){
x=Q.front();Q.pop();
for(int i=head[x];i;i=nxt[i]){
u=to[i];if(vis[u]) continue;
dis[id][u]=dis[id][x]+1;vis[u]=1;
Q.push(u);
}
}
} double dfs(int cat,int mouse){
if(f[cat][mouse]!=0.0) return f[cat][mouse];
int p=0;double sum=0;int prec=cat;
for(int t=0;t<=1;t++){
for(int i=head[cat];i;i=nxt[i]){
int u=to[i];if(dis[mouse][u]>=dis[mouse][cat]) continue;
if(!p || p>u) p=u;
}
if(p==mouse) return 1.0;cat=p;p=0;
}
if(cat==mouse) return 1.0;
for(int i=head[mouse];i;i=nxt[i]){
int u=to[i];
if(u==cat) sum+=1.0/(double)(du[mouse]+1);
else sum+=(double)(dfs(cat,u)+1.0)/(double)(du[mouse]+1);
}sum+=(double)(dfs(cat,mouse)+1.0)/(double)(du[mouse]+1);
return f[prec][mouse]=sum;
} int main(){
memset(dis,0x3f,sizeof(dis));
n=rd(),m=rd();int x,y;S=rd();T=rd();
for(int i=1;i<=m;i++){
x=rd(),y=rd();
add(x,y),add(y,x);du[x]++;du[y]++;
}
for(int i=1;i<=n;i++) bfs(i);
printf("%.3lf",dfs(S,T));
return 0;
}

BZOJ 1415: [Noi2005]聪聪和可可(记忆化搜索+期望)的更多相关文章

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

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

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

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

  3. Vijos1675 NOI2005 聪聪和可可 记忆化搜索

    简单题,结果因为理解错题意懵逼了好久…… moveTo[x][y]表示聪聪在节点x,可可在节点y时,聪聪下一步应到达哪一个节点 dp[x][y]表示聪聪在节点x,可可在节点y,且轮到可可行动时,所需时 ...

  4. 【BZOJ】1415: [Noi2005]聪聪和可可【期望】【最短路】【记忆化搜索】

    1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2335  Solved: 1373[Submit][Stat ...

  5. 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索

    [题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...

  6. bzoj 1415: [Noi2005]聪聪和可可 期望dp+记忆化搜索

    期望dp水题~ 你发现每一次肯定是贪心走 2 步,(只走一步的话就可能出现环) 然后令 $f[i][j]$ 表示聪在 $i$,可在 $j$,且聪先手两个人碰上面的期望最小次数. 用记忆化搜索转移就行了 ...

  7. bzoj 1415: [Noi2005]聪聪和可可

    直接上记忆化搜索 #include<queue> #include<cstdio> #include<algorithm> using namespace std; ...

  8. 【NOI2005】聪聪和可可 概率与期望 记忆化搜索

    1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1635  Solved: 958[Submit][Statu ...

  9. 【bzoj1415】[Noi2005]聪聪和可可 期望记忆化搜索

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

随机推荐

  1. react 脚手架使用

    下载脚手架 npm i react create-react-app //下载安装脚手架 create-react-app pro_nmae //创建一个react项目 尽量不要使用大写,因为在Lin ...

  2. Unity 调用jar闪退 解决方案

    { https://www.cnblogs.com/YZFHKMS-X/p/11864496.html }

  3. Delphi 消息函数 SendMessage函数

    Delphi中SendMessage使用说明 SendMessage基础知识 函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.而函数Po ...

  4. sql 性能优化 索引碎片

    1.索引 简单的说,索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快速找到数据,而不用全表扫描,合适的索引可以大大提高数据库查询的效率.(1). 优点大大加快了数据库检索的速度,包 ...

  5. PHP ftp_mdtm() 函数

    ftp_mdtm() 函数返回指定文件的最后修改时间. 该函数将以 Unix 时间戳的形式返回文件的最后修改时间,如果出错则返回 -1. 语法 int ftp_mdtm ( resource $ftp ...

  6. Java-Class-C:java.util.BigDecimal

    ylbtech-Java-Class-C:java.util.BigDecimal 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部 1. /* * Copyright (c) 19 ...

  7. 服务器安装TeamViewer 13

    服务器安装TeamViewer 13 服务器上安装TeamViewer,网上找了个教程开始安装,里面有坑,安装时要根据自己的情况而定.Linux系统更新太快,网上教程可能会有一些出入. TeamVie ...

  8. HTTPS 加密机制

    目录 1. HTTPS 概述 2. 对称加密 3. 非对称加密 4. 非对称加密改良方案 5. 非对称加密 + 对称加密 6. 中间人攻击 7. 数字证书 8. 数字签名 9. HTTPS 工作原理 ...

  9. vue组件通信之父组件主动获取子组件数据和方法

    ref 可以用来获取到dom节点,如果在组件中应用,也可以用来获取子组件的数据和方法. 比如,我定义了一个home组件,一个head组件,home组件中引用head组件. 此时,home组件是head ...

  10. divide方法

    java.math.BigDecimal.divide(BigDecimal divisor, RoundingMode roundingMode) 返回一个BigDecimal,其值为(this/除 ...