D题 Robots 【期望】

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;
}

原文地址:https://www.cnblogs.com/lusiqi/p/11491056.html

时间: 2024-10-10 10:34:06

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

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

攻防世界web题 robots https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5063 百度 robots协议 robots.txt文件是一个文本文件,使用任何一个常见的文本编辑器,比如Windows系统自带的Notepad,就可以创建和编辑它[1]  .robots.txt是一个协议,而不是一个命令.robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.robots.txt文件

HDU 5245 Joyful (概率题 求期望)

Joyful Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 478    Accepted Submission(s): 209 Problem Description Sakura has a very magical tool to paint walls. One day, kAc asked Sakura to paint a

HDU 5345 Joyful(概率题求期望)

D - Joyful Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Description Sakura has a very magical tool to paint walls. One day, kAc asked Sakura to paint a wall that looks like an $M \times N$ matrix. The wal

2019.4.9 一题——概率期望+0/1分数规划+最大权闭合子图

没注意 “第 x 条边和第 y 条边的起点是相同的” 的限制.没想出来. 有这个限制,可以考虑每个点分别计算.令 \( f[i] \) 表示从 i 出发的最大边数期望,那么先把拓扑序在自己之后的点的 \( f[ ] \) 算出来,然后考虑自己这个点的出边怎么做能使自己的 \( f[ ] \) 最大. \( f[i]=\frac{ \sum f[j]+1 }{ d } \) ,其中 d 是保留下来的边数, j 是保留边指向的点. 如果把 \( f[ ]+1 \) 看做收益, 1 看做代价,那么这个

【题解】亚瑟王 HNOI 2015 BZOJ 4008 概率 期望 动态规划

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4008 一道不简单的概率和期望dp题 根据期望的线性性质,容易想到,可以算出每张卡的期望伤害,然后全部加在一起 手算样例之后发现是正确的,那么我们只要求出每张卡的实际被使用的概率就可以了 记第$i$张卡的实际被使用的概率为$fp[i]$ 那么答案就是 $\Large\sum\limits_{i=0}^{n-1}fp[i]\cdot d[i]$ 如何求出$fp[i]$? 首先考虑第一张卡的$f

poj 2057 树形DP,数学期望

题目链接:http://poj.org/problem?id=2057 题意:有一只蜗牛爬上树睡着之后从树上掉下来,发现后面的"房子"却丢在了树上面, 现在这只蜗牛要求寻找它的房子,它又得从树根开始爬起,现在要求一条路径使得其找到房子 所要爬行的期望距离最小. 爬行距离如下计算, 题目规定每一个分支和枝末都看做是一个节点, 这些节点之间的距离都是1, 在分支上可能会有热心的毛毛虫, 这些毛毛虫会如实的告诉蜗牛他之前是否经过这条路径, 也正是因为毛毛虫, 因此询问毛毛虫的顺序使得这题的期

单选错位_期望

题目描述 gx和lc去参加noip初赛,其中有一种题型叫单项选择题,顾名思义,只有一个选项是正确答案.试卷上共有n道单选题,第i道单选题有ai个选项,这ai个选项编号是1,2,3,-,ai,每个选项成为正确答案的概率都是相等的.lc采取的策略是每道题目随机写上1-ai的某个数作为答案选项,他用不了多少时间就能期望做对道题目.gx则是认认真真地做完了这n道题目,可是等他做完的时候时间也所剩无几了,于是他匆忙地把答案抄到答题纸上,没想到抄错位了:第i道题目的答案抄到了答题纸上的第i+1道题目的位置上

bzoj4481非诚勿扰(期望dp)

有n个女性和n个男性.每个女性的如意郎君列表都是所有男性的一个子集,并且可能为空.如果列表非空,她们会在其中选择一个男性作为自己最终接受的对象.将"如意郎君列表"中的男性按照编号从小到大的顺序呈现给她.对于每次呈现,她将独立地以P的概率接受这个男性(换言之,会以1?P的概率拒绝这个男性).如果她选择了拒绝,App就会呈现列表中下一个男性,以此类推.如果列表中所有的男性都已经呈现,那么会重新按照列表的顺序来呈现这些男性,直到她接受了某个男性为止.显然,在这种规则下,每个女性只能选择接受一

js笔试题系列之三——函数

在这一章以函数为主的讲解中,也会不可避免的牵涉到数组和对象的内容,这也不难理解,知识往后走牵涉的内容自然也越多. (1)经典作用域问题 题一: var a = 0 function f(){ console.log(a); ==>undefined var a = 2; console.log(a); ==>2 } f() 第二次日志输出结果相对容易理解,关键是第一次打印结果并不是全局变量中的a,因为按照作用域链的查找规则,在函数执行的时候会先查找局部作用域,而此时局部作用域已经存在变量a,只