zoukankan      html  css  js  c++  java
  • [Luogu 4316] 绿豆蛙的归宿

    题目链接

    一道基础的 (DAG) 上期望 (DP)

    给出一个有向无环图,起点为 (1) 终点为 (N),每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都能够到达终点。到达每一个顶点时,如果有 (K) 条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 (frac{1}{K}) 。求从起点走到终点的所经过的路径总长度期望是多少。

    一开始使经过起点的概率为 (1),到起点的期望距离为 (0),拓扑推下去,(GG)(WA) 了两发,怎么也搞不出来……

    其实这道题的期望怎么算是很显然的,可以发现,(Ans = sum_{e in Edge} t_e w_e)(t_e) 为经过一条边的期望次数,即经过这条边起点的期望次数除以这条边起点的出度。

    然后可以设状态 (ex[x]) 表示点 (x) 到终点 (n) 的期望路径总长。显然,要求的答案为(ex[1]),而且有(ex[n]=0)。进行一遍拓扑排序,在拓扑排序的时候进行期望 (dp) 的转移。而对于一条有向边,我们假设它由 (x−>y),那么有 (ex[x]=(frac{1}{degree[x]})∗sum (ex[y] + w[x−>y]))。题目就解出来了……

    总结一下的话……期望 (DP) 也是一种 (DP),所以 (DP) 的相关内容都是有的。一般来说,初始状态确定时可用顺推,终止状态确定时可用逆推,而期望大多是逆推的。

    代码:

    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <cctype>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    const int maxn = 100000 + 10;
    double ex[maxn];
    int n, m, head[maxn], in_deg[maxn], out_deg[maxn], sta[maxn], top, edge_num;
    
    struct Edge { int v, w, nxt; } edge[maxn << 1];
    
    inline void Add_edge(int u, int v, int w) {
      edge[++edge_num].v = v, edge[edge_num].w = w, ++out_deg[u], ++in_deg[v];
      edge[edge_num].nxt = head[u], head[u] = edge_num;
    }
    
    inline void Breath_fs(int s) {
      queue<int> q; q.push(s);
      while( !q.empty() ) {
        sta[++top] = q.front(), q.pop();
        for(int i = head[sta[top]]; i; i = edge[i].nxt)
          if( --in_deg[edge[i].v] == 0 ) q.push(edge[i].v);
      }
    }
    
    int main(int argc, char const *argv[])
    {
      scanf("%d%d", &n, &m);
      for(int u, v, w, i = 1; i <= m; ++i)
        scanf("%d%d%d", &u, &v, &w), Add_edge(u, v, w);
      Breath_fs(1);
      for(int t = n; t > 0; --t)
        for(int x = sta[t], i = head[x]; i; i = edge[i].nxt)
          ex[x] = ex[x] + (ex[edge[i].v] + edge[i].w) / out_deg[x];
      printf("%.2lf
    ", ex[1]);
    
      return 0;
    }
    

     
                                 花影婆娑欲踏踩,悬崖樱树月色明。

  • 相关阅读:
    金额格式化vue组件实现
    微信小程序scroll-view滚动到最底部
    腾讯云点播开发引入mui.js 导致播放控件点击事件多次触发
    nodejs中使用crypto-js先HmacSha1加密后转Base64
    vue filters中使用data中数据
    移动web开发中input等输入框问题
    d3-tip中show在自己调用时需要改变this值
    js函数式编程curry与compose实现
    mui中confirm在苹果出现bug,confirm点击确定跳转页面再返回后,页面被遮罩盖住无法使用
    mui上拉加载会影响页面中的某些点击事件
  • 原文地址:https://www.cnblogs.com/nanjoqin/p/10393046.html
Copyright © 2011-2022 走看看