传送门

##解题思路
  还是比较简答的一道题。首先$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;
}

最新文章

  1. iOS从零开始学习直播之音频2.后台播放和在线播放
  2. JAVA中ListIterator和Iterator详解与辨析
  3. java:POI导出excel
  4. 【GoLang】GoLang 中 make 与 new的区别
  5. Creating HTML table with vertically oriented text as table header 表头文字方向
  6. fedora 20 注销
  7. OpenCL 第10课:kernel,work_item和workgroup
  8. 使用python操作mysql数据库
  9. hadoop2 YARN/Mv2中 ApplicationMaster相关问题及介绍
  10. DVWA 黑客攻防演练(十)反射型 XSS 攻击 Reflected Cross Site Scripting
  11. 【Docker】(6)---Dockerfile文件
  12. Scrapy中间件user-agent和ip代理使用
  13. List,泛型和Datatable 的相互转换
  14. 自制操作系统Antz(2)——进入保护模式 (上) jmp到保护模式
  15. CCBAnimationManager
  16. CNN Architectures(AlexNet,VGG,GoogleNet,ResNet,DenseNet)
  17. 新版本读取老版本文件崩溃BUG
  18. 出错的方法有可能是JDK,也可能是程序员写的程序,无论谁写的,抛出一定用throw
  19. c++ 读取文本问题
  20. Python+selenium之读取配置文件内容

热门文章

  1. 2017 ACM/ICPC Asia Regional Shenyang Online 12 card card card
  2. java输入一个整数N,打印1~n位数
  3. k8s集群搭建之二:etcd集群的搭建
  4. 小程序入坑(一)---如何引入iconfont 字体图标
  5. Vue学习笔记【18】——Vue中的动画(使用过渡类名)
  6. 文件系统类型(ext4、ntfs)
  7. badboy设置参数化
  8. 如何禁止C++默认成员函数
  9. 计算1到N中包含数字1的个数
  10. This inspection warns about local variables referenced before assignment.