2019南京网络赛 D. Robots(概率DP与拓扑排序)

使用kmplot在线进行生存分析 欢迎关注”生信修炼手册”!kmplot是一个生存分析的在线工具,最初是设计用来对肝癌中的miRNA进行生存分析,对应的文章发表在scientific reports上,链接如下https... 阅读详情

题目链接
在做这道题之前看一个简化版:绿豆蛙的归宿
设 F [ x ] F[x] F[x] 表示从 x x x 走到终点所经过的路径的期望长度。若从 x x x 出发有 k k k 条边,分别到达 y 1 , y 2 . . . y k y_1,y_2...y_k y1​,y2​...yk​ ,边长分别为 z 1 , z 2 . . . z k z_1,z_2...z_k z1​,z2​...zk​ ,则根据数学期望的定义和性质,有: F [ x ] = 1 k ∗ ∑ i = 1 k ( F [ y i ] + z i ) F[x]=\frac{1}{k}*\sum_{i=1}^k(F[y_i]+z_i) F[x]=k1​∗i=1∑k​(F[yi​]+zi​)
就可以将边取反然后用拓扑排序解决。

现在这道题在上面这道题的基础上相当于将边长设置为 1 ,然后多了一个每次多走一条边的花费。
每个点到 n n n 点的距离相当于: F d a y [ i ] = 1 d e g [ i ] + 1 ∗ ∑ j = 1 d e g [ i ] ( F d a y [ i ] + 1 ) + 1 d e g [ i ] + 1 ∗ ( F d a y [ i ] + 1 ) F_{day}[i]=\frac{1}{deg[i]+1}*\sum_{j=1}^{deg[i]}(F_{day}[i]+1)+\frac{1}{deg[i]+1}*(F_{day}[i]+1) Fday​[i]=deg[i]+11​∗j=1∑deg[i]​(Fday​[i]+1)+deg[i]+11​∗(Fday​[i]+1)化简之后: F d a y [ i ] = 1 d e g [ i ] ∗ ∑ j = 1 d e g [ i ] F d a y [ i ] + 1 d e g [ i ] + 1 F_{day}[i]=\frac{1}{deg[i]}*\sum_{j=1}^{deg[i]}F_{day}[i]+\frac{1}{deg[i]}+1 Fday​[i]=deg[i]1​∗j=1∑deg[i]​Fday​[i]+deg[i]1​+1
每个点到 n n n 点的花费相当于: F c o s t [ i ] = 1 d e g [ i ] + 1 ∗ ∑ j = 1 d e g [ i ] ( F c o s t [ i ] + F d a y [ i ] ) + 1 d e g [ i ] + 1 ∗ ( F c o s t [ i ] + F d a y [ i ] ) F_{cost}[i]=\frac{1}{deg[i]+1}*\sum_{j=1}^{deg[i]}(F_{cost}[i]+F_{day}[i])+\frac{1}{deg[i]+1}*(F_{cost}[i]+F_{day}[i]) Fcost​[i]=deg[i]+11​∗j=1∑deg[i]​(Fcost​[i]+Fday​[i])+deg[i]+11​∗(Fcost​[i]+Fday​[i])化简后: F c o s t [ i ] = 1 d e g [ i ] ∗ ∑ j = 1 d e g [ i ] F c o s t [ i ] + F d a y [ i ] d e g [ i ] + F d a y [ i ] F_{cost}[i]=\frac{1}{deg[i]}*\sum_{j=1}^{deg[i]}F_{cost}[i]+\frac{F_{day}[i]}{deg[i]}+F_{day}[i] Fcost​[i]=deg[i]1​∗j=1∑deg[i]​Fcost​[i]+deg[i]Fday​[i]​+Fday​[i]
由于我太菜,拓扑排序的版本我写的一直不对,改成 dfs 的写法之后就对了,要记得记忆化,不然会超时。

简化版代码:

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
#define PI acos(-1.0)
#define INF 0x3f3f3f3f3f3f3f3f
#define P pair<double, int>
#define debug(x) cout << (#x) << ": " << (x) << " "
#define fastio ios::sync_with_stdio(false), cin.tie(0)
const int mod = 1e9 + 7;
const int M = 1000000 + 10;
const int N = 1000000 + 10;

int n, m, a, b;
double c;
vector<P> G[N];
int du[N], deg[N];
double f[N];

signed main()
{
    scanf("%d %d", &n, &m);
    for(int i = 1; i <= m; i ++) {
        scanf("%d %d %lf", &a, &b, &c);
        G[b].push_back(P{c, a});
        du[a] ++, deg[a] ++;
    }

    queue<int> que;
    que.push(n);
    while(que.size()) {
        int now = que.front();
        que.pop();
        for(int i = 0; i < G[now].size(); i ++) {
            f[G[now][i].second] += (f[now] + G[now][i].first) / deg[G[now][i].second];
            du[G[now][i].second] --;
            if(!du[G[now][i].second]) que.push(G[now][i].second);
        }
    }
    printf("%.2lf\n", f[1]);

    return 0;
}

/*

  Rejoicing in hope, patient in tribulation .

*/

代码:

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
#define PI acos(-1.0)
#define INF 0x3f3f3f3f3f3f3f3f
#define P pair<int, int>
#define debug(x) cout << (#x) << ": " << (x) << " "
#define fastio ios::sync_with_stdio(false), cin.tie(0)
const int mod = 1e9 + 7;
const int M = 1000000 + 10;
const int N = 400000 + 10;

int t, n, m, a, b;
double f_day[N], f_cost[N];
int deg[N];
vector<int> G[N];

void init()
{
    for(int i = 1; i <= n; ++ i) {
        f_day[i] = f_cost[i] = deg[i] = 0;
        G[i].clear();
    }
}

double dfs_day(int now)
{
    if(now == n) return 0;
    if(f_day[now]) return f_day[now];
    double sum = 0;
    for(int i = 0; i < G[now].size(); ++ i) {
        sum += dfs_day(G[now][i]);
    }
    return f_day[now] = sum / deg[now] + 1 + 1.0 / deg[now];
}

double dfs_cost(int now)
{
    if(now == n) return 0;
    if(f_cost[now]) return f_cost[now];
    double sum = 0;
    for(int i = 0; i < G[now].size(); ++ i) {
        sum += dfs_cost(G[now][i]);
    }
    return f_cost[now] = sum / deg[now] + f_day[now] + f_day[now] / deg[now];
}

signed main()
{
    scanf("%d", &t);
    while(t --) {
        scanf("%d %d", &n, &m);
        init();
        for(int i = 1; i <= m; ++ i) {
            scanf("%d %d", &a, &b);
            G[a].push_back(b);
            deg[a] ++;
        }

        dfs_day(1);
        dfs_cost(1);

        printf("%.2f\n", f_cost[1]);
    }
    return 0;
}

/*

  Rejoicing in hope, patient in tribulation .

*/

Ubuntu配置Qt Creator树莓派交叉编译环境一步到位 本文详细指导在Ubuntu系统上配置Qt Creator树莓派交叉编译环境。从工具链安装、sysroot创建到Qt库编译,逐步讲解如何搭建完整的ARMv7交叉编译工具链,实现高效开发树莓派应用。 阅读详情

相关推荐

RT-Thread 5.1.0 实战:手把手教你用CubeMX和RT-Studio创建第一个工程(附常见编译错误修复)

本文详细介绍了如何使用STM32CubeMX和RT-Thread Studio 5.1.0创建第一个RT-Thread工程,包括开发环境准备、CubeMX配置、工程整合及常见编译错误修复。通过实战指南,帮助开发者快速上手RT-Thread 5.1.0,解决开发过程中的典型问题,提升嵌入式开发效率。

weixin_29165465的博客 285

(2019南京网络赛) D. Robots (概率dp)

传送门 题意:给出一张N个点M条边的有向无环图,1号点为全图唯一的入度为0的点,N号点为全图唯一的出度为0的点 现在你从1号点出发,每单位时间,你有相同的概率 走向相邻节点或原地不动。第 i 单位时间内你的消耗为 i , 询问你走到 N 点的期望消耗。 解:用两次期望递推,第一次dp1[i]求i点到N点的期望时间,第二次dp2[i]求i到N的期望代价,图是个拓扑图,所以我们可以从后往前推。 ...

一只不争气的蒸汽机的博客 753

Windows BITS服务:后台智能文件传输技术详解

后台文件传输技术是现代IT基础设施中的关键组件,Windows BITS(Background Intelligent Transfer Service)作为微软原生解决方案,通过队列管理和智能调度实现高效数据传输。其核心技术原理包括分块传输、断点续传和带宽自适应,能够根据网络状况动态调整传输速率(默认占用空闲带宽的80%)。在工程实践中,BITS特别适用于企业软件分发和自动化数据采集场景,通过PowerShell命令即可实现高优先级传输和代理配置。相比传统FTP方案,BITS在跨国文件传输中将失败率从30

weixin_42116058的博客 276

2019南京网络赛D Robots(概率DP+拓扑序)

题目链接 题意: DAG网络中,求从节点1走到节点n的期望的代价,具体代价的定义见题目即可。 思路: 这类概率dp的递推比较经典,很好写出递推式 用两次期望递推,第一次dp1[i]求i点到N点的期望时间,第二次dp2[i]求i到N的期望代价,图是个拓扑图,所以我们可以从后往前推(求DFS求拓扑序就是逆序) 下面借用一下别人的式子。 比赛中没有时间写这个题了,水题花了太...

weixin_30892037的博客 266

【已验证】基于STM32F407与AD9833的幅频特性测试装置设计与实现

本文详细介绍了基于STM32F407微控制器和AD9833 DDS芯片的低成本幅频特性测试装置设计与实现方法。通过扫频原理,该装置能自动生成正弦波信号,测量滤波器等电路的输出幅度变化,并在LCD屏幕或示波器上绘制幅频特性曲线。文章提供了从硬件选型、CubeMX工程配置、关键驱动代码编写到数据处理与可视化的完整教程,帮助电子爱好者与工程师快速搭建实用的滤波器测试工具。

weixin_35649491的博客 120

CSR-DCF视频目标跟踪源码运行笔记

论文基本信息 论文标题:Discriminative Correlation Filter with Channel and Spatial Reliability 论文作者:Alan Lukezic等 论文出处:CVPR 2017 文章链接:https://arxiv.org/abs/1611.08461 补充材料:https://www.semanticscholar.org/paper/D...

越野者的博客 3400

2019南京网络赛 D. Robots (概率dp)

题目链接:https://nanti.jisuanke.com/t/41301 题目大意:一个机器人从一点到n点去,每到一个地方有一个花费,等于机器人已经经过的天数,包含现在这步。 题目思路: 很骚的一个概率dp啊,大概思路是先处理出机器人到一个地方的期望天数,然后再用所求期望天数转移为期望花费。 定义dp1【i】为从i点出发到n点的期望天数。 dp2【...

qq_41645482的博客 366

ArcGIS+PLUS+InVEST三件套实战:从零搞定土地利用变化与碳储量预测(附完整数据包)

本文详细介绍了如何整合ArcGIS、PLUS模型和InVEST模型,构建土地利用变化与碳储量预测的完整研究流水线。通过多情景模拟和生态系统服务评估,提供从数据准备到结果验证的实战指南,助力研究者高效完成生态评估项目。

weixin_30399821的博客 543

[ICPC2019 南京网络赛]-D.Robots-拓扑期望递推

纪念逝去的切题能力23333

泉華子的OI足迹 685

【黑马-产品经理入门基础课笔记】01.认识产品经理

问题定义 ==> 可行性研究 ==> 需求分析。

2401_88466092的博客 1841

Orange3实战教程:文本挖掘---标注语料库地图

Oreange3,文本挖掘,标注语料库地图用于在二维投影中可视化、聚类文档,并用关键词进行标注。

err2008的专栏 818

2019南京网络赛Robots

https://nanti.jisuanke.com/t/41301 dp1[i]表示i到n的期望天数,dp2[i]表示i到n的期望耐力; dp1[u]=sum(dp1[v])/(du[u]+1)+dp1[u]/(du[u]+1)+1; dp2[u]=sum(dp2[v])/(du[u]+1)+dp2[u]/(du[u]+1)+dp1[u]; 化简; #include <ios...

newhonor 290

关于瑞芯微SDK中buildroot的架构分析、配置细节、以及一些使用步骤

摘要:瑞芯微SDK基于Buildroot框架,针对RK3568等芯片提供定制化开发环境。核心目录包括buildroot(配置与编译框架)、kernel(定制内核)和u-boot(引导程序)。开发流程为:1)加载芯片默认配置;2)通过menuconfig定制系统(架构、内核、软件包等);3)可选修改内核配置。关键硬件适配需修改设备树(dts)和分区表(parameter.txt),系统行为通过启动脚本(S90network)调整。最终执行make编译生成可烧录固件。该框架通过配置文件驱动,实现从工具链构建到固

Hyjks的博客 1199

2019ICPC南京网络赛 D-Robots(概率dp+拓扑排序)

题目链接 dp1[i] : 从i点到n点的期望天数 dp2[i]:从i点到n点的期望花费 out[i]:i点的出度 i,j之间有边,在i点时,机器人可到达j点,或者不动,概率相同。所以在i点有out[i]+1种选择,+1是代表不管机器人去哪,这一天都要加上。 同理: 因为是从后往前推,该题是有向无环图,所以建反边用拓扑排序。 code: #include<bits/...

qq_40503116的博客 275

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

The Preliminary Contest for ICPC Asia Nanjing 2019 ICPC南京站网络赛 D robots(随机游走概率DP+拓扑排序)

题目链接:https://nanti.jisuanke.com/t/41301 题目大意:有一张有向无环图,你要从入度为0的点走到一个出度为0的点,保证这两种点各只有一个,你可以走到下一个点也可以保持原地不动,每过一天可以走一步,每天都要加上一个值就是已过的天数作为代价,求代价的期望,比如到达一个点需要3天,那么就是1+2+3 题目思路:随机游走模板题?做过类似题目应该这题不成问题...

smilestruggler_Fly To Higher 281

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

2019 ICPC 南京网络赛 D.Robots

2019 ICPC 南京网络赛 D.Robots 题目给出n个点和m条有向边,机器人从1走到n,询问消耗的能量的期望。 如果只是求1到n的期望天数,就是很简单的套路题了,设dp[i]表示从i走到n的期望天数,容易得到dp[i]=p*dp[i]+(1-p)*dp[j]+1,其中p表示原地不动的概率。 比赛的时候求出天数之后就不会做了,没有细想,其实再叠加一曾,再做一次就可以了,设能量消耗是cost[...

yzsjwd的博客 294

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

[概率DP逆推求期望]2019ICPC南京网络赛 D robots

题意:给一个n个点的DAG,每天可以从某点走到其相邻点或者选择停留,第i天的花费是i,问从点1到点n的花费期望。 逆推,所以建反向边然后按拓扑序做。 dp[i]表示第i个点到n的期望天数(就是走几步) ans[i]表示第i个点到n的期望花费 dp[u]+1表示在u停留的情况下到n的天数,sum{dp[v]+1}都是不停留的情况下到n的情况,每种情况出现的概率都是1/(outdegree...

Mr_Alice的博客 753

Robots 2019icpc南京网络赛 DAG概率DP

题目 Description Given a directed graph with no loops which starts at node 1 and ends at node nn. There is a robot who starts at 1, and will go to one of adjacent nodes or stand still with equal probabi...

weixin_44273380的博客 274

Robots(2019 ACM-ICPC 南京赛区网络赛 D)

Problem Description Given a directed graph with no loops which starts at node1and ends at noden. There is a robot who starts at1, and will go to one of adjacent nodes or stand still withequal ...

Alex_McAvoy的博客 633

2019南京网络赛 D Robots 期望dp

题目传送门 题意:给出一幅有向无环图,保证只有1入度为0,n出度为0,求问一个机器人从1出发,每天等概率的走到相邻点或者留在原地,问到达n点的代价。每天的代价都不一样,就是天数(第x天走一步的代价就是x)。 思路:设出度每个点的选择情况为$cnt[i]$,即出度加1.   由于每天的代价和天数有关,所以应该要想到,可以先算出天数的期望。这样就可以得到每个点的代价,再算总的代价期望。...

weixin_30485379的博客 130

2019ICPC南京网络赛 D.Robots(概率dp)

传送门 题意:给出一张N个点M条边的有向无环图,1号点为全图唯一的入度为0的点,N号点为全图唯一的出度为0的点 现在你从1号点出发,每单位时间,你有相同的概率 走向相邻节点或原地不动。第 i 单位时间内你的消耗为 i 询问你走到 N 点的期望消耗 先求出1到n的期望时间,再由此推出期望消耗,第二个转移公式有点迷,本来应该加上从1到n的时间期望,但却加上了从i到n的时间期望。有个博客说累加起来就是...

qq_42944230的博客 222

2019年 ACM/ICPC 亚洲区域赛(南京)网络赛D. Robots(期望dp)

Given a directed graph with no loops which starts at node11and ends at nodenn. There is a robot who starts at11, and will go to one of adjacent nodes or stand still withequal probabilityevery d...

LSD20164388的博客 691

[2019南京网络赛D题]Robots

题目链接 2019.9.2更新 第二天睡醒想了想发现好像搜一遍就可以过,赛时写的花里胡哨的还错了,太菜了QAQ 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn = 3e5 + 10; 5 struct node {...

weixin_30865427的博客 156

2019ICPC南京网络赛 - D. Robots

题意: 给定一个 n 个点、m 条边的有向无环图,现在要从1号结点沿边走向 n 号结点,每天等概率走向某一邻接结点或者停留在原地,每天花费代价为经历的天数,求到 n 号结点时的期望代价。保证只有 1 号结点无入度,只有 n 号结点无出度。(n <= 1e5, m <= 2e5) 链接: https://nanti.jisuanke.com/t/41301 题解: 期望dp,f[u] 表...

weixin_44059127的博客 255

【2019南京ICPC网络赛 D】Robots【DAG上的随机游走】

题意: 给出一个有向无环图,从 111 号点向 nnn 号点前进。每次等概率地转移到后继节点,也有可能留在当前节点。定义每一天的花费是当前走过的天数,即第 iii 天的花费是 iii,求从起点走到终点的总花费。(2≤n≤105,1≤m≤2∗105)(2\leq n\leq 10^5,1\leq m\leq 2*10^5)(2≤n≤105,1≤m≤2∗105) 思路: 令 day[i]day[i]...

lucius-liu.cn 475

【2019ICPC南京网络赛】D. Robots

原题题址 说说实话,这题在没接触过概率dp的时候我不太会做,自学了点概率dp的时候就不太难了。说实话我的题意分析有问题,以为只需要算出期望日期就行了,结果忘了还要算期望花费。 其实两次期望dp就行,而且由于两个转移方式相同,推出一个就行了。 时间期望,dp1[i]dp_{1}[i]dp1​[i]表示到点i的期望时间,根据每个点的概率回推,每次回推时间多1,很容易得到。 dp1[i]=dp1[i]N...

weixin_43751631的博客 348
上一篇: BZOJ-3674 可持久化并查集加强版 (主席树+并查集按秩合并)
下一篇: 牛客练习赛37B 筱玛的排列(字典树 + dfs)
ttoobne
博客等级 码龄9年 13粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值