[JOI 2015 Final]舞会

题目

传送门 to LOJ

思路

大佬的博客写的贼好,我都不好意思自己再写一篇了😇

其实我们可以认为能力值互不相同,哈希一下即可。

首先,第一步就直接是神来之笔,将过程转化为树!一颗完全三叉树,每个非叶子节点代表,三个儿子中“脱(吃)颖(了)而(狗)出(粮)”的那个可怜人。叶子节点则是全体贵族。

这棵树可能就是介个样子的,拿样例解释中的队伍来画一画:

在这里插入图片描述当然,树的形态可能会长的奇奇怪怪。但是,我肯定地说,树的形态是唯一的

现在,我们有一颗树,其中的一些节点是被固定了的。我们就可以利用树形 dpdp 啦!

第二步,又是天启之着,二分最终的答案,将数字划分为零和一

这个操作也可以在这道题里使用。特点:只在乎大小关系。

划分成零和一之后,我们可以直接用树形 dpdp ,记 f(x)f(x) 为,使得 xx11 的代价。叶子节点很简单,直接判断是否为 11 ;否则,我们需要两个儿子都取到 11 。所以,简单来讲就是 f(x)=mincyc[f(a)+f(b)]f(x)=\min_{\text{cyc}}[f(a)+f(b)]

这里借用了一下循环求和的符号 cyc\text{cyc} ,意会就好啦,就是选两个子节点。

显然 dpdp 的复杂度是线性的,又有二分,故总复杂度是 O(nlogn)\mathcal O(n\log n)

代码

该博主设置了查阅权限,只有他的女朋友才能查看代码!

——不过他没有女朋友。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章