C - Rencontre Gym - 102798C
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相关推荐
- 强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例
强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例 1. 引言 在这个部分补充之前马尔科夫决策和动态规划部分的代码.在以后的内容我会把相关代码都附到相关内容的后面.本部 ...
- Gym - 102082G
Gym - 102082G https://vjudge.net/problem/2198225/origin 对于数列中任意一个数,要么从最左边到它不递减,要么从最右边到到它不递减,为了满足这个条件 ...
- 安装gym库_强化学习Gym库学习实践(一)
最近看了一篇研究方向相关的文章,介绍了一种DQN的应用,感觉还挺新鲜的.想着把这篇文章复现出来,就开始学习强化学习的相关知识,作为一名小白,这一路走的可是真的十分艰难(我太菜了啊!) 看了莫烦Pyth ...
- 强化学习环境库 Gym 发布首个社区发布版,全面兼容 Python 3.9
作者:肖智清 来源:AI科技大本营 强化学习环境库Gym于2021年8月中旬迎来了首个社区志愿者维护的发布版Gym 0.19.该版本全面兼容Python 3.9,增加了多个新特性. 强化学习环境库的事 ...
- Gym迎来首个完整环境文档,强化学习入门更加简单!
深度强化学习实验室 官网:http://www.neurondance.com/ 论坛:http://deeprl.neurondance.com/ 编辑:OpenDeepRL OpenAI Gym是 ...
- Codeforces Gym 100513G G. FacePalm Accounting 暴力
G. FacePalm Accounting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513 ...
- Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)
原文地址:http://blog.csdn.net/jinzhuojun/article/details/77144590 和其它的机器学习方向一样,强化学习(Reinforcement Learni ...
- OpenAI Gym介绍
上篇博客介绍了OpenAI Gym.OpenAI Gym与强化学习以及OpenAI Gym的安装,接下来运行一个demo体验一下OpenAI Gym这个平台,以CartPole(倒立摆)为例,在工作目 ...
- 独家 | 使用Python的OpenAI Gym对Deep Q-Learning的实操介绍(附学习资源)
作者:ANKIT CHOUDHARY 翻译:张睿毅 校对:吴金笛 本文4300字,建议阅读10+分钟. 本文作者通过实战介绍了Deep Q-Learning的概念. 导言 我一直对游戏着迷.在紧凑的时 ...
最新文章
- 刻意练习:LeetCode实战 -- 不同的二叉搜索树
- 关闭Struts2中s:property的HTML自动转码
- templateclass T函数模板
- 网络推广方法中浅谈网站中的内容如何优化好?
- SCN Headroom与时光倒流到1988年的Oracle数据库
- 反向输出一个四位数c语言程序,将一个四位数反向输出
- python global 变量_python global全局变量 模块通信问题
- C语言基础篇(零)gcc编译和预处理
- transactionscope 中的异步 处理 异常_PLC编程中的异常处理
- tabcontrol设置当前活动页
- Vue_(组件)计算属性
- 如何用yolov5测试图片
- python爬虫付费内容_Python爬虫:十大付费代理详细对比
- HP LaserJet Pro MFP M227d安装指南
- ERROR: [BD 41-237] VIVADO使用BD时报错
- word 文本框插入图片
- 黑苹果检测_苹果技术进行情绪检测
- python输入什么就输出什么意思_python中的输入与输出是什么?(实例详解)
- 不要上当,显示器用绿色背景有害视力
- 北斗GPS定位系统原理
热门文章
- 熊吃人该不该杀?这头3米高的大熊吃了7个人,还在洞里藏了很多女人用的东西.........
- 加载elementor时出现问题_不锈钢管在焊接时出现问题要怎么解决?
- 输出毫秒_自学单片机第十三篇上:单点输出
- unity 坐标系转换_Unity的几种坐标系及相互转换
- lumen 配置数据库结果自动转数组_lumen 数据库操作 Cannot use object of type stdClass as array...
- java 面相,java学习17-面相对象(多态)
- crt脚本 js 在_crt脚本 js 在_使用SecureCRT自带的脚本录制功能。
- android mvvm流程图,MVVM框架模式详解
- 只能选择分卷文件的第一部分。_为机器学习模型选择正确的度量评估(第一部分)...
- java中注解的解析_全面解析Java中的注解与注释