题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1415

题意:一个无向图,一个猫、一只老鼠。在任意时刻猫知道老鼠在哪个顶点上。每次移动猫先。猫每次向靠近老鼠的顶点移动。若没有到达老鼠所在顶点,则接着再移动一次(即便是两次也是用的一个时间单位);然后老鼠移动;老鼠每次向周围的顶点移动或者呆在原地不动,概率相同。猫和老鼠在一个顶点上则吃掉老鼠。求吃掉老鼠的时间期望。

思路:设f[i][j][0]表示猫在i、老鼠在j、轮到猫移动的期望;f[i][j][1]表示轮到老鼠移动的期望。则对于固定的i和j,轮到猫移动时,下一次猫移动到的顶点是固定的,设为s,则f[i][j][0]=f[s][j][1]+1;对于老鼠,设与其相邻顶点集合为S,大小为num,则f[i][j][1]=(sum(f[i][Sk][0])+f[i][j][0])/(num+1)。一开始我担心会出现兜圈子的情况,就是老鼠在转,猫跟着转,这样就麻烦了,貌似需要列方程求解。但是分析一下不会出现这种情况,因为猫每次移动两个,老鼠最多移动一个,猫总能撵上老鼠的。。

vector<int> g[N];
int dis[N][N],p[N][N];
double f[N][N][2];
int n,m,S,T;

void SPFA(int u,int dis[])
{
    int i;
    FOR1(i,n) dis[i]=INF;
    dis[u]=0;
    queue<int> Q;
    Q.push(u);
    int visit[N]={0};
    visit[u]=1;
    int v;
    while(!Q.empty())
    {
        u=Q.front();
        Q.pop();
        
        visit[u]=0;
        FOR0(i,SZ(g[u]))
        {
            v=g[u][i];
            if(dis[v]>dis[u]+1)
            {
                dis[v]=dis[u]+1;
                if(!visit[v]) Q.push(v),visit[v]=1;
            }
        }
    }
}

int cal(int u,int v)
{
    if(u==v) return u;
    int i,x,Min=INF,k;
    FOR0(i,SZ(g[u]))
    {
        x=g[u][i];
        if(dis[v][x]<Min||dis[v][x]==Min&&x<k) Min=dis[v][x],k=x;
    }
    if(k==v) return k;
    Min=INF;
    FOR0(i,SZ(g[k]))
    {
        x=g[k][i];
        if(dis[v][x]<Min||dis[v][x]==Min&&x<u) Min=dis[v][x],u=x;
    }
    return u;
}

void init()
{
    int i,j;
    FOR1(i,n) SPFA(i,dis[i]);
    FOR1(i,n) FOR1(j,n) p[i][j]=cal(i,j);
}

double DFS(int u,int v,int t)
{
    if(u==v) return 0;
    if(f[u][v][t]>-1) return f[u][v][t];
    int i,x;
    if(t==0) f[u][v][t]=DFS(p[u][v],v,1)+1;
    else
    {
        f[u][v][t]=0;
        FOR0(i,SZ(g[v]))
        {
            x=g[v][i];
            f[u][v][t]+=DFS(u,x,0);
        }
        f[u][v][t]+=DFS(u,v,0);
        f[u][v][t]/=SZ(g[v])+1;
    }
    return f[u][v][t];
}

int main()
{
    RD(n,m); RD(S,T);
    int i,x,y;
    FOR1(i,m)
    {
        RD(x,y);
        g[x].pb(y);
        g[y].pb(x);
    }
    init();
    clr(f,-1);
    PR(DFS(S,T,0));
}

BZOJ 1415 聪聪和可可(概率DP)的更多相关文章

  1. BZOJ 1415 [NOI2005]聪聪与可可 (概率DP+dfs)

    题目大意:给你一个无向联通图,节点数n<=1000.聪聪有一个机器人从C点出发向在M点的可可移动,去追赶并吃掉可可,在单位时间内,机器人会先朝离可可最近的节点移动1步,如果移动一步机器人并不能吃 ...

  2. 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), ...

  3. bzoj 1415 [Noi2005]聪聪和可可——其实无环的图上概率

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1415 乍一看和“游走”一样.于是高斯消元.n^2状态,复杂度n^6…… 看看TJ,发现因为聪 ...

  4. 【BZOJ 1419】Red is good [概率DP]

    我 是 Z Z 概率好玄啊(好吧是我太弱.jpg Description 桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元.可以随时停止翻 ...

  5. BZOJ 1415: [Noi2005]聪聪和可可 [DP 概率]

    传送门 题意:小兔子乖乖~~~ 题意·真:无向图吗,聪抓可,每个时间聪先走可后走,聪一次可以走两步,朝着里可最近且点编号最小的方向:可一次只一步,等概率走向相邻的点或不走 求聪抓住可的期望时间 和游走 ...

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

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

  7. bzoj 1415: [Noi2005]聪聪和可可【期望dp+bfs】

    因为边权为1所以a直接bfs瞎搞就行--我一开始竟然写了个spfa #include<iostream> #include<cstdio> #include<queue& ...

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

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

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

    传送门 解题思路 还是比较简答的一道题.首先\(bfs\)把每个点到其他点的最短路求出来,然后再记忆化搜索.记搜的时候猫的走法是确定的,搜一下老鼠走法就行了. 代码 #include<iostr ...

  10. BZOJ 1246 & 有点不一样的概率DP

    题意: 题意够坑的啊... 一个色子有n个面,第k次掷出一个加上这个k.求掷出所有面的期望值. 我一直以为值是色子面上的... 那么问题来了在色子面上怎么做...n还是1w级别... SOL: 对着理 ...

随机推荐

  1. bzoj 1024 暴力深搜

    我们直接暴力的深搜怎么切就行了, 每一刀切的方案只有横着和竖着,横竖又分在几等分点切, 因为要保证每个人的面积相同,所以比较好处理了,第几个几等分点就 分给这边几刀. /*************** ...

  2. hdu 1548 A strange lift 宽搜bfs+优先队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 There is a strange lift.The lift can stop can at ...

  3. 机器学习&&数据挖掘之一:决策树基础认识

    决策树入门篇 前言:分类是数据挖掘中的主要分析手段,其任务就是对数据集进行学习并构造一个拥有预测功能的分类模型,用于预测未知样本的类标号,把类标号未知的样本按照某一规则映射到预先给定的类标号中. 分类 ...

  4. win8 修改msconfig 里面的"引导高级选项" 最大内存后 BSOD的解决方案

    最近由于本人的电脑一直非常卡,于11.4日通过win8任务管理器分析发现 Peer Name Resolution Protocol Peer Networking Grouping Peer Net ...

  5. MX记录

    是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据 收信人的地址后缀来定位邮件服务器.MX记录也叫做邮件路由记录,用户可以将该域名下的邮件服务器指向到自己的mail server上,然 ...

  6. PostgreSQL数据库中获取表主键名称

    PostgreSQL数据库中获取表主键名称 一.如下表示,要获取teacher表的主键信息: select pg_constraint.conname as pk_name,pg_attribute. ...

  7. Javascript全局变量的使用方法

    1.demo例子说明 <script type="text/javascript"> var gDivId; //js全局变量 function geocoder(la ...

  8. HDU4718 The LCIS on the Tree(LCT)

    又是一枚LCT,写一发加深一下对LCT的理解.本题的坑爹之处就在于,它实在是太坑爹了.询问的是树路径上的最长连续上升的子串,考验的是怎么样去维护.一开始的想法是维护三个变量 ls,rs,mxl,分别表 ...

  9. ZOJ3550 Big Keng(三分)

    题意:给定一个立体的图形,上面是圆柱,下面是圆台,圆柱的底面半径和圆台的上半径相等,然后体积的V时,问这个图形的表面积最小可以是多少.(不算上表面).一开始拿到题以为可以YY出一个结果,就认为它是圆锥 ...

  10. 【hadoop】mapreduce原理总结

    看了两天的各种博客,终于把MapReduce的原理理解了个大概.花了1个小时画了个流程图.大家看看,有不对的地方欢迎指正. 关键步骤: Map, Reduce就不多说了.记录一下我看了很久的部分: 1 ...