题目链接

https://loj.ac/problem/2229

题解

评分标准提示我们可以使用随机化算法。

首先,我们为每一道编号在 \([1, m]\) 以内的题目(这些题目也对应了 \(m\) 个初始的想法)赋一个 \([0, d]\) 以内的随机权值。接下来,我们可以通过 \(O(n)\) 的递推来求出每一道编号在 \((m, n]\) 以内的题目所包含的所有想法对应权值的最小值。记第 \(i(i > m)\) 道题目包含 \(x_i\) 个不同的想法,且这些想法对应权值的最小值为 \(w_i\),那么有 \(w_i\) 的期望值为 \(\frac{d}{x_i + 1}\)。

我们试着证明一下上述结论。在此之前,我们先思考一个值域较小但更为普遍的问题:在 \([0, 1]\) 内选择 \(x\) 个随机变量(变量之间互相独立,且在 \([0, 1]\) 内均匀随机),求选出的这 \(x\) 个变量中第 \(k\) 小值的期望。

我们将该问题做一个转化:求选出的这 \(x\) 个变量中第 \(k\) 小值的期望,等价于求再在 \([0, 1]\) 内选择一个随机变量,求选出的这个变量小于之前选出的 \(x\) 个变量中第 \(k\) 小值的概率。

经过转化之后的问题显然就很好做了。我们考虑按照数值从小到大给这 \(x + 1\) 个变量赋上排名。忽略变量相等的情况,那么这 \(x + 1\) 个变量的排名构成了一个 \(x + 1\) 的排列,且显然,产生各个排列的概率是相同的。\(x + 1\) 的全排列数为 \((x + 1)!\),我们考虑用合法的排列数除以全排列数来求概率,这样,问题转化为了求共有多少种 \(x + 1\) 的排列满足排列的最后一个位置的值不超过 \(k\)。显然合法的排列总数为 \(k \times x!\)。因此概率即为 \(\frac{k \times x!}{(x + 1)!} = \frac{k}{x + 1}\),那么可以得到在 \([0, 1]\) 内选出的 \(x\) 个随机变量中第 \(k\) 小值的期望也为 \(\frac{k}{x + 1}\)。

这个结论其实被直接放在了[ZJOI2015]地震后的幻想乡一题的提示中。

这样,当随机权值的值域为 \([0, d]\) 时,选出 \(x\) 个随机权值的最小值 \(w\) 的期望即为 \(\frac{1}{x + 1} \times d\)。若求得 \(w\) 的期望 \(E\),那么可得 \(x = \frac{d}{E} - 1\)。

对于第 \(i\) 个想法,我们可以通过多次随机化求平均数来得到 \(w_i\) 的期望的近似值。设随机化的次数为 \(T\),那么总时间复杂度为 \(O(Tn)\)。

代码

#include<bits/stdc++.h>

using namespace std;

const int N = 1e6 + 10;

int n, m, from[N][2], a[N];
double answer[N]; int main() {
scanf("%d%d", &n, &m);
int M = 100000000 / n;
for (int i = m + 1; i <= n; ++i) {
scanf("%d%d", &from[i][0], &from[i][1]);
}
for (int tt = 1; tt <= M; ++tt) {
for (int i = 1; i <= m; ++i) {
a[i] = rand();
}
for (int i = m + 1; i <= n; ++i) {
a[i] = min(a[from[i][0]], a[from[i][1]]);
answer[i] += (double) a[i] / M;
}
}
for (int i = m + 1; i <= n; ++i) {
answer[i] = RAND_MAX / answer[i] - 1;
printf("%.0lf\n", answer[i]);
}
return 0;
}

LOJ2229. 「BJOI2014」想法(随机化)的更多相关文章

  1. LOJ#2230. 「BJOI2014」大融合

    LOJ#2230. 「BJOI2014」大融合 题目描述 小强要在$N$个孤立的星球上建立起一套通信系统.这套通信系统就是连接$N$个点的一个树.这个树的边是一条一条添加上去的. 在某个时刻,一条边的 ...

  2. 【LOJ】#2230. 「BJOI2014」大融合

    题解 我现在真是太特么老年了 一写数据结构就颓废,难受 这题就是用lct维护子树 ???lct怎么维护子树 这样想,我们给每个点记录虚边所在的子树大小,只发生在Access和link的时候 这样的话我 ...

  3. loj2230 「BJOI2014」大融合

    LCT裸题 我LCT学傻了这题明显可以树剖我不会树剖了 本来的siz是Splay上的子树和,并没有什么用. 所以每个点维护虚子树和和子树和 虚子树和即虚边连接的子树和,且只有在access和link操 ...

  4. Loj 2230. 「BJOI2014」大融合 (LCT 维护子树信息)

    链接:https://loj.ac/problem/2230 思路: 设立siz数组保存虚点信息,sum表示总信息 维护子树信息link操作和access操作需要进行一些改动 可参考博客:https: ...

  5. loj2341「WC2018」即时战略(随机化,LCT/动态点分治)

    loj2341「WC2018」即时战略(随机化,LCT/动态点分治) loj Luogu 题解时间 对于 $ datatype = 3 $ 的数据,explore操作次数只有 $ n+log n $ ...

  6. loj3161「NOI2019」I 君的探险(随机化,整体二分)

    loj3161「NOI2019」I 君的探险(随机化,整体二分) loj Luogu 题解时间 对于 $ N \le 500 $ 的点,毫无疑问可以直接 $ O(n^2) $ 暴力询问解决. 考虑看起 ...

  7. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  8. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  9. LOJ_2305_「NOI2017」游戏 _2-sat

    LOJ_2305_「NOI2017」游戏 _2-sat 题意: 给你一个长度为n的字符串S,其中第i个字符为a表示第i个地图只能用B,C两种赛车,为b表示第i个地图只能用A,C两种赛车,为c表示第i个 ...

随机推荐

  1. JavaScript 分号使用总结

    没有应该不应该,只有你自己喜欢不喜欢.JavaScript 语法长得 C-like 不代表它本质上和 C 是一类语言,所有直觉性的 "当然应该加分号" 都是保守的.未经深入思考的草 ...

  2. android Service 的简单使用(转)

    1.要使用Service,首先就是在配置文件里吗添加Service,如果不填加,你的Service是不能够使用的.目前学到的方法有两种    方法一:<service android:enabl ...

  3. ASP.NET MVC与ASP.NET Web API的区别(转)

    出处:http://blog.csdn.net/wangzl1163/article/details/72676616 MVC主要用来构建网站,既关心数据也关心页面展示,而Web API只关注数据 W ...

  4. Docker的安装,配置,更新和卸载

    我们可以在Linux中安装Docker并运行Hello world应用程序.通过下面这些操作,我们将会学到更多有关于Docker的基础特征.我们将会学到如何: 安装Docker引擎 在一个容器中运行软 ...

  5. Bootstrap导航栏

    导航栏: <div id="menu-nav" class="navbar navbar-default navbar-inverse navbar-fixed-t ...

  6. spring注解@Value取不到值【转】

    spring注解@Value取不到值 今天在一个项目中发现一个情况,在Service中取不到name值,直接输出了{name}字符串,找了好久,最后在一篇文章中找到解决方案. 解决这个问题的一篇文章( ...

  7. ASP.NET:邮件服务器与客户端

    目录: 一.概述 二.MX设置 三.使用系统的SMTP功能发邮件 四.使用hMailServer收发邮件 五.Web邮件客户端 一.概述 首先必须清楚SMTP才是提供邮件服务器的核心,收发邮件全靠SM ...

  8. django drf 级联数据和RetrieveModelMixin

    1.定义View from django.shortcuts import render from rest_framework.views import APIView from rest_fram ...

  9. c# 生成二维码图片

    转载自:https://blog.csdn.net/hyunbar/article/details/78271778 1.在C#中直接引用ThoughtWorks.QRCode.dll 类 2.封装方 ...

  10. c# in out ref关键字

    class in_out_ref { #region in 关键字 delegate void DContravariant<in A>(A argumen); static void o ...