简单题,结果因为理解错题意懵逼了好久……

moveTo[x][y]表示聪聪在节点x,可可在节点y时,聪聪下一步应到达哪一个节点

dp[x][y]表示聪聪在节点x,可可在节点y,且轮到可可行动时,所需时间的数学期望(可可第一次行动不计入其内)

 #include <cstdio>
 #include <cstring>
 #include <algorithm>
 #include <vector>
 #include <queue>

 typedef std::vector<int> Vec;
 typedef Vec::iterator It;

 ;
 const double notVis=-1.0;

 Vec adj[maxN];
 int N,E;
 int C,K;
 int moveTo[maxN][maxN];

 void init()
 {
     ;i<maxN;i++) adj[i].clear();
     memset(moveTo,,sizeof(moveTo));
 }

 bool input()
 {
     if(scanf("%d%d",&N,&E)==EOF) return false;
     init();
     scanf("%d%d",&C,&K);
     int v1,v2;
     ;i<=E;i++)
     {
         scanf("%d%d",&v1,&v2);
         adj[v1].push_back(v2);
         adj[v2].push_back(v1);
     }
     return true;
 }

 struct Node
 {
     int idx;
     int layer;
     Node(int i,int l):idx(i),layer(l) {}
     bool operator < (const Node& other) const
     {
         return this->layer > other.layer ||
             (this->layer == other.layer && this->idx > other.idx);
     }
 };

 void calcMoveTo()
 {
     std::priority_queue<Node> pq;
     ;t<=N;t++)
     {
         moveTo[t][t]=t;
         pq.push(Node(t,));
         while(!pq.empty())
         {
             Node cur=pq.top();
             pq.pop();
             int& v=cur.idx;
             for(It x=adj[v].begin();x!=adj[v].end();++x)
                 if(!moveTo[*x][t])
                 {
                     moveTo[*x][t]=v;
                     pq.push(Node(*x,cur.layer+));
                 }
         }
     }
 }

 double dp[maxN][maxN];

 double solve_aux(int Cpos,int Kpos)
 {
     if(dp[Cpos][Kpos]!=0.0)
         return dp[Cpos][Kpos];
     for(It x=adj[Kpos].begin();x!=adj[Kpos].end();++x)
     {
         if(Cpos==(*x)) continue;
         int Cnext=Cpos; bool ok=false;
         ;i<= && !ok;i++)
         {
             Cnext=moveTo[Cnext][*x];
             if(Cnext==(*x))
             {
                 dp[Cpos][Kpos]+=1.0;
                 ok=true;
             }
         }
         if(!ok) dp[Cpos][Kpos]+=(1.0+solve_aux(Cnext,*x));
     }
     dp[Cpos][Kpos]/=double(adj[Kpos].size());
     return dp[Cpos][Kpos];
 }

 double solve()
 {
     if(C==K) return 0.0;
     ;i<=;i++)
     {
         C=moveTo[C][K];
         if(C==K) return 1.0;
     }
     memset(dp,,sizeof(dp));
     ;i<=N;i++) adj[i].push_back(i);
     return 1.0+solve_aux(C,K);
 }

 int main()
 {
     while(input())
     {
         calcMoveTo();
         printf("%.3lf\n",solve());
     }
     ;
 }

Vijos1675 NOI2005 聪聪和可可 记忆化搜索的更多相关文章

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

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

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

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

  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]聪聪和可可 期望DP+记忆化搜索

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

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

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

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

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

  9. luogu P4206 [NOI2005]聪聪与可可 期望dp 记忆化搜索

    LINK:聪聪与可可 这道题的核心是 想到如何统计答案. 如果设f[i][j]表示第i个时刻... 可以发现还需要统计位置信息 以及上一次到底被抓到没有的东西 不太好做. 两者的位置都在变化 所以需要 ...

随机推荐

  1. 什么是系统,什么是算法 -- lemon OA 系统学习总结

    一.对于模块划分的理解 对于一个大型(这里还只是一个中型系统)系统来说,代码的编写不是一日而就的,层次的明细也不是一眼就能看清楚的. 在这种情况下,需要想好,最好是由上而下地想好. 能够模块式地划分最 ...

  2. 大型系统OA--需求

    1.面向普通用户 普通用户一般都是公司的小职员,上OA都干什么呢?当然是获取信息咯.还有最好很多事儿,不需要跟公司的其他部门的人儿,打交道,直接在网上解决就好了. 收发邮件: 查看自己发动的流程,也就 ...

  3. 【转】在Ubuntu下编译Android源码并运行Emulator

    原文网址:http://www.mcuos.com/thread-4553-1-1.html 建立编译环境 1.在VirtualBox上安装Ubuntu 2.安装JDK   $ sudo apt-ge ...

  4. uC/OS-II学习历程(持续更新)

    开始接触嵌入式操作系统的知识了,作为入门,选择了一个小巧的系统——uC/OS-II.当然,难度也并不小,至少对我来说是这样.刚刚开始看,使用的参考书是任哲的<嵌入式实时操作系统uC/OS-II原 ...

  5. Delegate。。

    Delegate类简介------------------------ 命名空间:System程序集:mscorlib(在 mscorlib.dll 中) 委托(Delegate)类是一种数据结构,通 ...

  6. SRM 441(1-250pt, 1-500pt)

    DIV1 250pt 题意:用数组A表示置换,由该置换得到数组B(B[0] = 0, B[i] = A[B[i-1]]).给定A,求一个A',使得由A'得到的B为单循环置换且A'与A的差距最小.定义A ...

  7. 来更新一篇blog吧

    最近做了一下hackerrank的20/20的比赛.平时都只能过2题,这周顺利地通过了四道题目竟然.当妄图冲击衬衫的时候,发现剩下三个题一点招数都没有,之后就跑去看了一下node.js了... 这次比 ...

  8. [置顶] SVN服务器搭建和使用

    Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http:// ...

  9. HTTP 返回时间 概念 TTFB..

    课外学习部分: 什么是TTFB呢? 1.TTFB (Time To First Byte),是最初的网络请求被发起到从服务器接收到第一个字节这段时间,它包含了 TCP连接时间,发送HTTP请求时间和获 ...

  10. SQL string类型的数据按int类型排序 分类: SQL Server 2014-12-08 16:56 393人阅读 评论(0) 收藏

    说明: 我在做wms进销存软件时,发现一个问题:一张入库单(T_OutIn_BoxTop),入库扫描时要分成多箱,箱号(BoxTop_No)可以是数字也可以是字符串,所以箱号只能是字符串类型的,问题来 ...