C - Rencontre Gym - 102798C
参考题解:
参考一
参考二

题意:

有一棵树,树上的点分为三种,(一个点可以为多种),现在分别在三种点中随机选一点a,b,c,然后找到一个合适的v,使得f=min(dis(a,v)+dis(b,v)+dis(c,v))
求出f的期望

题解:

f = min(dis(a,v)+dis(b,v)+dis(c,v)) = min{1/2( dis(a,b)+ dis(b,c) +dis(a,c) )}
E(f) = 1/2( E(dis(a,b))+E(dis(a,c))+E(dis(b,c)) )
这样a,b,c就是独立的三组,我们要求任意两组内所有点的距离的期望,咋求?

|a|表示集合a内的元素数量
现在问题就是如何快速求任意两点距离和
这个我们可以用换根法来求
对于边(u,v),其对答案的贡献就是siz[v] * (n-siz[v]) * w
siz[v]表示v的子树中节点数量
n-siz[v]表示非v的子树的节点数量
这两部分中点都可以相互连接
代码中siz[v][1]:表示在v的子树中属于块1的点的数量

代码:

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
const int N = 1e6 + 10;struct Edge {int v;ll w;
};vector<Edge> g[N];
ll cnt[4], siz[N][4];
double ans;void dfs1(int u, int fa) {for(auto e : g[u]) {int v = e.v;if(v == fa) continue;dfs1(v, u);for(int i = 1;i <= 3; i++) {siz[u][i] += siz[v][i];}}
}void dfs2(int u, int fa) {for(auto e : g[u]) {int v = e.v;if(v == fa) continue;dfs2(v, u);for(int i = 1;i <= 3; i++) {for(int j = 1;j <= 3; j++) {//枚举任意两个块 if(i == j) continue;ans += 1.0 * ((siz[1][i] - siz[v][i]) * siz[v][j] * 1.0 * e.w / (cnt[i] * cnt[j]) / 2.0);/*(siz[1][i] - siz[v][i])表示在子树v之外的属于块i的点的数量siz[v][j]表示在子树v之内的属于块j的点的数量 */ }}}
}void solve() {int n; cin >> n;for(int i = 1;i < n; i++) {int u, v; ll w; cin >> u >> v >> w;g[u].push_back(Edge{v, w});g[v].push_back(Edge{u, w});}for(int i = 1;i <= 3; i++) {cin >> cnt[i];for(int j = 1;j <= cnt[i]; j++) {int x;cin >> x;siz[x][i]++;}}dfs1(1, -1);dfs2(1, -1);printf("%.12f\n",ans);
}int main() {solve();return 0;
}

C - Rencontre Gym - 102798C相关推荐

  1. 强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例

    强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例 1. 引言 在这个部分补充之前马尔科夫决策和动态规划部分的代码.在以后的内容我会把相关代码都附到相关内容的后面.本部 ...

  2. Gym - 102082G

    Gym - 102082G https://vjudge.net/problem/2198225/origin 对于数列中任意一个数,要么从最左边到它不递减,要么从最右边到到它不递减,为了满足这个条件 ...

  3. 安装gym库_强化学习Gym库学习实践(一)

    最近看了一篇研究方向相关的文章,介绍了一种DQN的应用,感觉还挺新鲜的.想着把这篇文章复现出来,就开始学习强化学习的相关知识,作为一名小白,这一路走的可是真的十分艰难(我太菜了啊!) 看了莫烦Pyth ...

  4. 强化学习环境库 Gym 发布首个社区发布版,全面兼容 Python 3.9

    作者:肖智清 来源:AI科技大本营 强化学习环境库Gym于2021年8月中旬迎来了首个社区志愿者维护的发布版Gym 0.19.该版本全面兼容Python 3.9,增加了多个新特性. 强化学习环境库的事 ...

  5. Gym迎来首个完整环境文档,强化学习入门更加简单!

    深度强化学习实验室 官网:http://www.neurondance.com/ 论坛:http://deeprl.neurondance.com/ 编辑:OpenDeepRL OpenAI Gym是 ...

  6. Codeforces Gym 100513G G. FacePalm Accounting 暴力

    G. FacePalm Accounting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513 ...

  7. Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)

    原文地址:http://blog.csdn.net/jinzhuojun/article/details/77144590 和其它的机器学习方向一样,强化学习(Reinforcement Learni ...

  8. OpenAI Gym介绍

    上篇博客介绍了OpenAI Gym.OpenAI Gym与强化学习以及OpenAI Gym的安装,接下来运行一个demo体验一下OpenAI Gym这个平台,以CartPole(倒立摆)为例,在工作目 ...

  9. 独家 | 使用Python的OpenAI Gym对Deep Q-Learning的实操介绍(附学习资源)

    作者:ANKIT CHOUDHARY 翻译:张睿毅 校对:吴金笛 本文4300字,建议阅读10+分钟. 本文作者通过实战介绍了Deep Q-Learning的概念. 导言 我一直对游戏着迷.在紧凑的时 ...

最新文章

  1. 刻意练习:LeetCode实战 -- 不同的二叉搜索树
  2. 关闭Struts2中s:property的HTML自动转码
  3. templateclass T函数模板
  4. 网络推广方法中浅谈网站中的内容如何优化好?
  5. SCN Headroom与时光倒流到1988年的Oracle数据库
  6. 反向输出一个四位数c语言程序,将一个四位数反向输出
  7. python global 变量_python global全局变量 模块通信问题
  8. C语言基础篇(零)gcc编译和预处理
  9. transactionscope 中的异步 处理 异常_PLC编程中的异常处理
  10. tabcontrol设置当前活动页
  11. Vue_(组件)计算属性
  12. 如何用yolov5测试图片
  13. python爬虫付费内容_Python爬虫:十大付费代理详细对比
  14. HP LaserJet Pro MFP M227d安装指南
  15. ERROR: [BD 41-237] VIVADO使用BD时报错
  16. word 文本框插入图片
  17. 黑苹果检测_苹果技术进行情绪检测
  18. python输入什么就输出什么意思_python中的输入与输出是什么?(实例详解)
  19. 不要上当,显示器用绿色背景有害视力
  20. 北斗GPS定位系统原理

热门文章

  1. 熊吃人该不该杀?这头3米高的大熊吃了7个人,还在洞里藏了很多女人用的东西.........
  2. 加载elementor时出现问题_不锈钢管在焊接时出现问题要怎么解决?
  3. 输出毫秒_自学单片机第十三篇上:单点输出
  4. unity 坐标系转换_Unity的几种坐标系及相互转换
  5. lumen 配置数据库结果自动转数组_lumen 数据库操作 Cannot use object of type stdClass as array...
  6. java 面相,java学习17-面相对象(多态)
  7. crt脚本 js 在_crt脚本 js 在_使用SecureCRT自带的脚本录制功能。
  8. android mvvm流程图,MVVM框架模式详解
  9. 只能选择分卷文件的第一部分。_为机器学习模型选择正确的度量评估(第一部分)...
  10. java中注解的解析_全面解析Java中的注解与注释