「JSOI2014」歌剧表演】的更多相关文章

「JSOI2014」歌剧表演 传送门 没想到吧我半夜切的 这道题应该算是 \(\text{JSOI2014}\) 里面比较简单的吧... 考虑用集合关系来表示分辨关系,具体地说就是我们把所有演员分成若干个集合,满足同一个集合内的演员两两不能分辨. 初始时所有演员位于同一个集合内. 然后对于某次参加了演出的演员,他们可能分别来自不同的集合,那么这些集合就会有两类不同的组成元素:一种是参加了当前这次演出的,另外一种是没参加的. 那么我们就需要把这两种元素分开,也就是把这个集合拆成两个. 有解的情况就…
Loj #2568. 「APIO2016」烟花表演 题目描述 烟花表演是最引人注目的节日活动之一.在表演中,所有的烟花必须同时爆炸.为了确保安全,烟花被安置在远离开关的位置上,通过一些导火索与开关相连.导火索的连接方式形成一棵树,烟花是树叶,如图 1所示.火花从开关出发,沿导火索移动.每当火花抵达一个分叉点时,它会扩散到与之相连的所有导火索,继续燃烧.导火索燃烧的速度是一个固定常数.图 1展示了六枚烟花 \(\{E_1, E_2, \ldots, E_6 \}\) 的连线布局,以及每根导火索的长…
「APIO2016」烟花表演 解题思路 又是一道 solpe trick 题,观察出图像变化后不找一些性质还是挺难做的. 首先令 \(dp[u][i]\) 为节点 \(u\) 极其子树所有叶子到 \(u\) 距离为 \(i\) 的最少代价,显然有 \[ dp[u][i]=\sum_{v\in son(u)}\min_{0\leq j \leq i}\{dp[v][j]+|C(u,v)-(i-j)|\} \] 定义函数 \[ f_u(x)=dp[u][x] , g_u(x)= \min_{0\le…
「JSOI2014」矩形并 传送门 我们首先考虑怎么算这个期望比较好. 我们不难发现每一个矩形要和 \(n - 1\) 个矩形去交,而总共又有 \(n\) 个矩形,所以我们把矩形两两之间的交全部加起来再除以 \(n(n - 1)\) 就是答案. 至于算矩形之间的交我们可以考虑把每个矩形都视为在这个矩形范围内区间加上 \(1\) ,那么我们只需要查询一个矩形内的和 - 该矩形自身的贡献就可以算出一个矩形与其他矩形的交. 所以现在相当于我们只需要实现二维的区间加/查询. 但是数据范围很大我们不可能用…
「JSOI2014」打兔子 传送门 首先要特判 \(k \ge \lceil \frac{n}{2} \rceil\) 的情况,因为此时显然可以消灭所有的兔子,也就是再环上隔一个点打一枪. 但是我们又会发现当 \(n = 3, k = 2\) 时,这种情况也满足上述条件但是我们只能打掉两群兔子,所以选兔子最多的两个格子打. 对于剩下的情况我们可以考虑 \(\text{DP}\) . 我们可以发现一件事,就是说如果我们把环弱化成链,那么顺着打就可以包含所有状态了. 所以说我们就可以有一个性质:两个…
「JSOI2014」电信网络 传送门 一个点选了就必须选若干个点,最大化点权之和,显然最大权闭合子图问题. 一个点向它范围内所有点连边,直接跑最大权闭合子图即可. 参考代码: #include <cstring> #include <cstdio> #define rg register #define file(x) freopen(x".in", "r", stdin), freopen(x".out", "…
「JSOI2014」学生选课 传送门 看到这题首先可以二分. 考虑对于当前的 \(mid\) 如何 \(\text{check}\) 我们用 \(f_{i,j}\) 来表示 \(i\) 对 \(j\) 的好感度排名,那么对于两个人 \(i\),\(j\) 如果有 \(\max\{f_{i, j}, f_{j, i}\} > mid\) 那么显然这两个人是不能上同一个老师的课的. 而且每个人可以上的课只有两种,我们记为 \(a_{i, 0 / 1}\) 假设 \(i\),\(j\) 对于当前的 \…
「JSOI2014」支线剧情2 传送门 不难发现原图是一个以 \(1\) 为根的有根树,所以我们考虑树形 \(\text{DP}\). 设 \(f_i\) 表示暴力地走完以 \(i\) 为根的子树的最小代价,那么 \(f_i\) 的计算就很显然了: \[f_i = \sum_{j \in son_i}f_j + s_j \times dis(i, j)\] \(s_i\) 表示以 \(i\) 为根的子树的叶子数. 我们再设一个 \(dp_i\) 表示在可以存档读档的条件下走完以 \(i\) 为根…
「JSOI2014」强连通图 传送门 第一问很显然就是最大的强连通分量的大小. 对于第二问,我们先把原图进行缩点,得到 \(\text{DAG}\) 后,统计出入度为零的点的个数和出度为零的点的个数,两者取 \(\max\) 就是答案. 理性证明可以看这里 参考代码: #include <cstdio> #define rg register #define file(x) freopen(x".in", "r", stdin), freopen(x&q…
「JSOI2014」序列维护 传送门 其实这题就是luogu的模板线段树2,之所以要发题解就是因为学到了一种比较NB的 \(\text{update}\) 的方式.(参见这题) 我们可以把修改操作统一化,视为 \(ax + b\) 的形式,然后我们按照原来的套路来维护两个标记,分别代表 \(a\) 和 \(b\) ,那么我们的更新就可以这么写: inline void f(int p, int atag, int mtag, int l, int r) { t[p].sum = (t[p].su…