Sol

记忆化搜索.

\(f[u][v]\) 表示聪聪在 \(u\) ,可可在 \(v\) ,聪聪抓到可可的期望.

预处理出 \(u\) 到 \(v\) 最短路径编号最小的点,记为 \(g[u][v]\) .

点 \(u\) 的度数记为 \(du[u]\) .

显然递归出口就是

\(u==v\) 那么此时 \(f[u][v]=0\) 已经在同一个点了,不会再互相伤害了.

\(p[u][v]=v\) 或者 \(p[p[u][v],v]=v\) 那么就互相伤害吧! \(f[u][v]=1\)

对于其他情况

\(f[u][v]=(\frac{1}{du[v]+1} \sum_{k=1}^{du[i]} f[g[g[u][v]][v],p]+f[g[g[u][v]][v],v])+1,p\in Edge(v,p)\)

Code

#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<iostream>
using namespace std;
#define N 1005
inline int in(int x=0,char ch=getchar()){ while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; }
int n,m,s,t;int d[N],pre[N],p[N][N],du[N];bool b[N],vis[N][N];
double f[N][N];vector<int> g[N];
void SPFA(int S){
queue<int> q;memset(d,0x3f,sizeof(d));memset(b,0,sizeof(b));
d[S]=0,q.push(S),b[S]=1;
for(int u,v;!q.empty();){
u=q.front(),q.pop();
for(int i=0;i<du[u];i++){
if(d[v=g[u][i]]>d[u]+1||(d[v]==d[u]+1&&u<pre[v])){
d[v]=d[u]+1,pre[v]=u;if(!b[v]) q.push(v),b[v]=1;
}
}b[u]=0;
}for(int i=1;i<=n;i++) if(i!=S) p[i][S]=pre[i];
}
double DFS(int u,int v){
if(u==v) return f[u][v]=0;if(p[u][v]==v) return f[u][v]=1;if(p[p[u][v]][v]==v) return f[u][v]=1;
if(f[u][v]>1e-9) return f[u][v];f[u][v]=1;int nxt=p[p[u][v]][v];
for(int i=0;i<du[v];i++){
f[u][v]+=DFS(nxt,g[v][i])/(du[v]+1);
}f[u][v]+=DFS(nxt,v)/(du[v]+1);return f[u][v];
}
int main(){
n=in(),m=in(),s=in(),t=in();
for(int i=1,u,v;i<=m;i++)
du[u=in()]++,du[v=in()]++,g[u].push_back(v),g[v].push_back(u);
for(int i=1;i<=n;i++) SPFA(i);
return printf("%.3lf\n",DFS(s,t)),0;
}

  

NOI2005 聪聪和可可的更多相关文章

  1. BZOJ 1415: [Noi2005]聪聪和可可( 最短路 + 期望dp )

    用最短路暴力搞出s(i, j)表示聪聪在i, 可可在j处时聪聪会走的路线. 然后就可以dp了, dp(i, j) = [ dp(s(s(i,j), j), j) + Σdp(s(s(i,j), j), ...

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

    [BZOJ1415][NOI2005]聪聪和可可(动态规划,数学期望) 题面 BZOJ 题解 先预处理出当可可在某个点,聪聪在某个点时 聪聪会往哪里走 然后记忆化搜索一下就好了 #include< ...

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

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

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

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

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

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

  6. 【BZOJ】【1415】【NOI2005】聪聪和可可

    数学期望+记忆化搜索 论文:<浅析竞赛中一类数学期望问题的解决方法>——汤可因  中的第一题…… Orz 黄学长 我实在是太弱,这么简单都yy不出来…… 宽搜预处理有点spfa的感觉= = ...

  7. BZOJ_1415_[Noi2005]聪聪和可可_概率DP+bfs

    BZOJ_1415_[Noi2005]聪聪和可可_概率DP+bfs Description Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2 ...

  8. P4206[NOI2005]聪聪与可可

    链接P4206 [NOI2005]聪聪与可可 类似于开车旅行,如果老鼠确定了那么猫的路线是确定的. 预处理\(g_{i,j}\)表示老鼠在\(i\)号点,猫的下一步方向,\(Bfs\)就行了 设\(f ...

  9. BZOJ 1415 【NOI2005】 聪聪和可可

    题目链接:聪聪和可可 一道水题--开始还看错题了,以为边带权--强行\(O(n^3)\)预处理-- 首先,我们显然可以预处理出一个数组\(p[u][v]\)表示可可在点\(u\),聪聪在点\(v\)的 ...

  10. 【bzoj1415】 Noi2005—聪聪和可可

    http://www.lydsy.com/JudgeOnline/problem.php?id=1415 (题目链接) 题意 一张图,聪聪想吃可可.每单位时间聪聪可以先移动两次:可可后移动一次或停在原 ...

随机推荐

  1. Python学习笔记——基本语法

    1.程序输出——print语句 >>> myString = 'Hello World!' >>> print myString Hello World! > ...

  2. ubuntu下增加中文编码

    在Ubuntu中,利用命令:locale,来查看系统的语言环境 参考:http://blog.chinaunix.net/uid-94449-id-2002589.html Windows的默认编码为 ...

  3. Java数据结构——解析算术表达式

  4. C++ 内存管理与堆栈

    /*内存管理与堆栈: * # 一个由C/C++编译的程序占用的内存分为以下几个部分 * 1.栈区:由编译器自动分配释放,数据先进后出 * 2.堆区:由程序员手动分配释放,数据先进先出, * new 和 ...

  5. div文字超出

    效果一:div文字超出处理 <div style="width:200px; white-space:nowrap;overflow:hidden;text-overflow:elli ...

  6. How to debug windows service

    Step 1. Add the following code in what you want to debug. System.Diagnostics.Debugger.Launch(); Step ...

  7. centos 7.0 编译安装mysql 5.6.22 再次总结 成功编译安装~ 越来越熟练了~

    查找php.ini文件所在位置 [root@localhost /]# find -name php.ini ./usr/etc/php/etc/php.ini mysql官网的安装说明http:// ...

  8. Redis-cluster集群【第二篇】:redis持久化

    Redis持久化原理: Redis支持两种持久化:RDB和AOF模式 一.名词解释: RDB:持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot).AOF ...

  9. ASP.NET MVC使用Bootstrap系列(3)——使用Bootstrap 组件

    阅读目录 Bootstrap 导航条 列表组 徽章 媒体对象 页头 路径导航 分页 输入框组 按钮式下拉菜单 警告框 进度条 小结 Bootstrap为我们提供了十几种的可复用组件,包括字体图标.下拉 ...

  10. C++ security issue analyze

    https://sploitfun.wordpress.com/about-2/ “Happiness is only real when shared” – Into the wild http:/ ...