Robots

Given a directed graph with no loops which starts at node 11 and ends at node nn.
There is a robot who starts at 11, and will go to one of adjacent nodes or stand still with equal probability every day.
Every day the robot will have durability consumption which equals to the number of passed days.
Please calculate the expected durability consumption when the robot arrives at node nn.
It is guaranteed that there is only one node (node 1) whose in-degree is equal to 0,
and there is only one node (node n) whose out-degree is equal to 0. And there are no multiple edges in the graph.

Input
The first line contains one integer T (1≤T≤10)
For each case,the first line contains two integers n (2≤n≤10^5) and m (1≤m≤2×10^5), the number of nodes and the number of edges, respectively.
Each of the next mm lines contains two integers u and v (1≤u,v≤n) denoting a directed edge from u to v.
It is guarenteed that ∑n≤4×10^5, and ∑m≤5×10^5.

Output
Output T lines.Each line have a number denoting the expected durability consumption when the robot arrives at node n.
Please keep two decimal places.

样例输入
1
5 6
1 2
2 5
1 5
1 3
3 4
4 5
样例输出
9.78

翻译:

给定一个没有循环的有向图,它从节点11开始,在节点nn结束。
有一个机器人从11岁开始,每天都以相同的概率走到相邻的一个节点,或者站着不动。
机器人每天的耐用性消耗相当于过去的天数。
请计算机器人到达节点nn时的预期耐久性消耗。
保证只有一个节点(节点1)的入度为0,
并且只有一个节点(节点n)的出度等于0。图中没有多条边
输入
第一行包含一个整数T(1≤T≤10)
对于每种情况,第一行包含两个整数n(2≤n≤10^5)和m(1≤m≤2×10^5),分别为节点数和边数。
接下来的mm线每条都包含两个整数u和v(1≤u,v≤n),表示从u到v的有向边。
∑n≤4×10^5,∑m≤5×10^5。

输出
输出线。每一行都有一个数字,表示机器人到达节点n时的预期耐久性消耗。
请保留两位小数。

官方题解:

dp[i] :1到N的天数期望;

f[i]:花费代价期望;

out[i]表示点的出度;

天数期望方程

dp[i]  =   1/( out[i] + 1 )*dp[i]  + 1/( out[i] + 1  )*∑dp[j]  + 1;

移式化简后:

dp[i]  = 1/out[i]*∑dp[j]  + 1 +  1/out[i];

花费期望:

f[i]=1/(   out[i] +  1 )*f[i]  +  1/( out[i] + 1)*∑f[j]  +  dp[i];

移式化间后:

f[i]  =  1/out[i]*∑f[j] + (out[i] + 1) / out[i] * dp [ i ];

ac代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 110000;
int t,n,m;
int out[2*N];
double dp[2*N],f[2*N];
vector<int> v[2*N];
void init(){
    for(int i=0;i<=n;i++){
        v[i].clear();
        dp[i] = 0;
        f[i] = 0;
        out[i] = 0;
    }
}
double dfsdp(int x){
    if(dp[x]!=0) return dp[x];
    if(out[x] == 0)  return dp[x];
    int len = v[x].size();
    double s1=0;
    for(int i=0;i<len;i++){
        int e=v[x][i];
        dfsdp(e);
        s1+=dp[e];
    }
    dp[x]=s1/out[x]*1.0+1+1.0/out[x];
    return dp[x];
}

double dfsf(int x){
    if(f[x]!=0) return f[x];
    if(out[x] == 0)  return f[x];
    int len = v[x].size();
    double s1=0;
    for(int i=0;i<len;i++){
        int e=v[x][i];
        dfsf(e);
        s1+=f[e];
    }
    f[x]=s1/out[x]*1.0+(1+1.0/out[x]*1.0)*dp[x];
    return f[x];
}

int main(){

 int a,b;
    int t;
    cin>>t;
    while(t--){
        init();
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++){
            scanf("%d%d",&a,&b);
            out[a]++;
            v[a].push_back(b);
        }
        dfsdp(1);
        dfsf(1);
        printf("%.2f\n",f[1]);
    }
    return 0;
}

D题 Robots 【期望】的更多相关文章

  1. CTF--web 攻防世界web题 robots backup

    攻防世界web题 robots https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=506 ...

  2. LightOJ 1248 Dice (III) (水题,期望DP)

    题意:给出一个n面的色子,问看到每个面的投掷次数期望是多少. 析:这个题很水啊,就是他解释样例解释的太...我鄙视他,,,,, dp[i] 表示 已经看到 i 面的期望是多少,然后两种选择一种是看到新 ...

  3. HDU 5245 Joyful(概率题求期望)

    D - Joyful Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit S ...

  4. bzoj 2510: 弱题 概率期望dp+循环矩阵

    题目: Description 有M个球,一开始每个球均有一个初始标号,标号范围为1-N且为整数,标号为i的球有ai个,并保证Σai = M. 每次操作等概率取出一个球(即取出每个球的概率均为1/M) ...

  5. 2019南京网络赛 D Robots 期望dp

    题目传送门 题意:给出一幅有向无环图,保证只有1入度为0,n出度为0,求问一个机器人从1出发,每天等概率的走到相邻点或者留在原地,问到达n点的代价.每天的代价都不一样,就是天数(第x天走一步的代价就是 ...

  6. light oj 1248 第六周E题(期望)

    E - 期望(经典问题) Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu   Descri ...

  7. [2019南京网络赛D题]Robots

    题目链接 2019.9.2更新 第二天睡醒想了想发现好像搜一遍就可以过,赛时写的花里胡哨的还错了,太菜了QAQ #include<bits/stdc++.h> using namespac ...

  8. 期望dp+高斯消元优化——uvalive4297好题

    非常好的题!期望+建矩阵是简单的,但是直接套高斯消元会T 所以消元时要按照矩阵的形态 进行优化 #include<bits/stdc++.h> using namespace std; ; ...

  9. bzoj 2134 单选错位(期望)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2134 [题意] ai与ai+1相等得1分,求期望. [思路] 每个题的期望都是独立的. ...

随机推荐

  1. shell 删除除匹配字符串之外的所有文件夹

    file_dir=` -maxdepth - type d`for dir in $file_dirdo file_name=`basename $dir` if [ $file_name != &q ...

  2. 点读系列《jmeter官方用户手册》

    官网:http://jmeter.apache.org/usermanual/ 说明:十八元件.十九属性.二十函数,涉及清单内容暂未仔细阅读,个人觉得一是仅供使用参考,二是适合单独写文章来解读 一.让 ...

  3. 高级UI晋升之自定义view实战(七)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章自定义ViewGroup实现瀑布流效果来进行详解dispatchTouch ...

  4. Python中过滤HTML标签的函数

    #用正则简单过滤html的<>标签 import re str = "<img /><a>srcd</a>hello</br>&l ...

  5. Django rest_framework 自动生成接口文档

    自动生成接口文档 REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 1. 安装依赖 REST fram ...

  6. nginx进行获取阿里云slb真实ip配置操作

    环境: 1.使用阿里云的slb进行配置nginx,nginx无法获取用户的真实ip解决方案 参考阿里云: https://help.aliyun.com/knowledge_detail/40535. ...

  7. 关于SQL中 =:的含义

    一个很恶臭的例子来说明 =: 在sql语句中是做什么用的 int number= 114514: //众所周知野兽先辈的咆哮(世界级美声)是一串数字 var strSql = "select ...

  8. Java——类的成员之五:内部类

    3.6 类的成员之五:内部类 3.6.1 静态内部类 ①静态内部类可以等同看做静态变量. ②内部类重要的作用:可以访问外部类中私有的数据. ③静态内部类可以直接访问外部类的静态数据,无法直接访问成员. ...

  9. INNODB存储引擎之缓冲池

    以下的资料总结自:官方文档和<MySQL技术内幕-INNODB存储引擎>一书. 对INNODB存储引擎缓冲池的那一段描述来自博文:http://www.ywnds.com/?p=9886说 ...

  10. HTML5的新增功能有哪些?

    HTML5 将成为 HTML.XHTML 以及 HTML DOM 的新标准. 新的功能: 1.用于绘画的 canvas 元素 2.用于媒介回放的 video 和 audio 元素 3.对本地离线存储的 ...