首先这道题让我回忆了一下最短路算法,所以我在此做一个总结:

带权: Floyed:O(n3)

SPFA:O(n+m),这是平均复杂度实际上为O(玄学)

Dijkstra:O(n+2m),堆优化以后

因此,稀疏图:SPFA或 Dijkstra可以再大约O(n2)左右的时间跑完每个点到每个点的最短路

稠密图:啥也别说 Floyed

不带权(边权为1):SPFA=Dijkstra(堆优化)=BFS=O(n+2m) ,这个是真的差距只有常数

Floyed:O(n3)

因此,同上

从这个题我得出来一点期望概率dp的小思路:找到各个状态间的核心逻辑关系

这个题就是 f[cat][mouse]=∑f[cat一下子扑到][mouse走到]

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#define MAXN 1010
using namespace std;
typedef double D;
D f[MAXN][MAXN];
int n,m,s,e,d[MAXN][MAXN],dis[MAXN][MAXN],via[MAXN][MAXN],q[MAXN],head,tail,sz,now;
struct Two
{
int a,b;
}two[MAXN*MAXN];
int comp(const Two a,const Two b)
{
return dis[a.a][a.b]<dis[b.a][b.b];
}
inline void blabla()
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
printf("%d live %d with %lf\n",i,j,f[i][j]);
}
inline void bfs(int st)
{
head=;
tail=;
q[++tail]=st;
while(tail>=head)
{
int x=q[head++];
for(int i=;i<=via[x][];i++)
if(dis[st][via[x][i]]==&&via[x][i]!=st)
{
dis[st][via[x][i]]=dis[st][x]+;
if(dis[st][via[x][i]]<=) d[st][via[x][i]]=via[x][i];
else d[st][via[x][i]]=d[st][x];
q[++tail]=via[x][i];
}
}
}
void pre()
{
scanf("%d%d%d%d",&n,&m,&s,&e);
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
via[x][++via[x][]]=y;
via[y][++via[y][]]=x;
}
for(int i=;i<=n;i++)
sort(via[i]+,via[i]+via[i][]+);
for(int i=;i<=n;i++)
bfs(i);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i!=j)
{
two[++sz].a=i;
two[sz].b=j;
}
sort(two+,two+sz+,comp);
}
void work()
{
now=;
while(now<=sz)
{
++now;
if(dis[two[now].a][two[now].b]<=)
{
f[two[now].a][two[now].b]=1.0;
continue;
}
int x=d[two[now].a][two[now].b],y=two[now].b;
f[two[now].a][two[now].b]+=f[x][y]*1.0/(1.0+via[y][]*1.0)+1.0;
for(int i=;i<=via[y][];i++)
f[two[now].a][two[now].b]+=f[x][via[y][i]]*1.0/(1.0+via[y][]);
}
}
int main()
{
freopen("cchkk.in","r",stdin);
freopen("cchkk.out","w",stdout);
pre();
work();
printf("%.3lf",f[s][e]);
return ;
}

BZOJ1415: [Noi2005]聪聪和可可 最短路 期望概率dp的更多相关文章

  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. luoguP4206 [NOI2005]聪聪与可可 期望概率DP

    首先,分析一下这个猫和鼠 猫每局都可以追老鼠一步或者两步,但是除了最后的一步,肯定走两步快些.... 既然猫走的步数总是比老鼠多,那么它们的距离在逐渐缩小(如果这题只能走一步反而不能做了...) 猫不 ...

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

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

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

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

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

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

  6. bzoj1415[NOI2005]聪聪和可可

    之前做的一些图上的期望步数的题大多用到高斯消元来求解(HNOI游走,SDOI走迷宫,etc),因此我一开始做这道题的时候想偏了- 这道题的性质:聪聪和可可之间的最短路长度严格递减.因为聪聪总可以多走一 ...

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

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

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

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

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

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

随机推荐

  1. 函数名前加 & 符号的深入理解 C++

    #include <iostream> using namespace std; int& test_str() { ; return a; //通过返回 a 的地址来进行 值的返 ...

  2. sort函数

    做项目的时候,排序是一种经常要用到的操作.如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的时间,还很有可能写错.STL里面有个sort函数,可以直接对数组排序,复杂度为n ...

  3. BAT批处理

    常用命令 查看目录内容命令dir 指定可执行文件搜索目录path 创建目录命令md 打开指定目录命令cd 删除当前指定的子目录命令rd 改变当前盘符命令d: 文件复制命令copy 显示文本文件内容命令 ...

  4. shell重温---基础篇(连接数据库)

    前几天分享了shell字符串操作,数组操作等,接下来回归到项目,进行数据库操作.按照一般情况来说,shell连接数据库基本上都是DB使用的,因为需要运行大量的sql啊什么的,所以都会封装到shell中 ...

  5. python2.7练习小例子(十二)

        12):题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数" ...

  6. Union-find 并查集

    解决问题 给一系列对点0~N-1的连接,判断某两个点p与q是否相连. private int[] id; // 判断p和q是否属于同一个连通分量 public boolean connected(in ...

  7. ActiveMQ测试实例

    ActiveMQ的安装与启动 1 下载ActiveMQ:http://activemq.apache.org/download.html 2 下载后解压到任意文件夹,解压后文件夹内的目录为: 3 进入 ...

  8. nginx location优先级

    目录 1. 配置语法 2. 配置实例 3. 总结: 网上查了下location的优先级规则,但是很多资料都说的模棱两可,自己动手实地配置了下,下面总结如下. 1. 配置语法 1> 精确匹配 lo ...

  9. python保留关键字和常用关键字

    python保留关键字和常用关键字如下: 上图是python3中的关键字,python2.7中的关键字部分会有区别,具体在自己打印输出查看: import keyword print ' '.join ...

  10. 对SE的认识

    对SE的认识 简述 “架构师”,也就是SE,总是给外人一种比较牛逼的感觉,其实踏实做开发的真的很少关注这个title. 抛开这个名词,这个角色的存在的确有一定的意义,因为项目中需要一个能“带领大家前进 ...