正题

题目链接:https://www.luogu.org/problemnew/show/P5290


题目大意

将一棵树的所有节点分城若干个组。每个组的价格是这个组中价格最大的点,要求这个组中没有任何祖孙关系。
求所有组的权值和最小。(1号为根节点)


解题思路

我们先想10,11,1210,11,1210,11,12的点(1号节点最多有两条支链)。

我们可以将两条链分成两个组,然后每次取两个组中最大的两个进行合并。

那如果有多条支链但是这些支链不重合呢?那么我们可以将前两个合并好之后继续用现在的来合并后面的,因为这样一定不会重合。

那如果支链重合呢?那么我们假设一个节点的所有子节点都合并好了,那么我们是不是就可以用上面的方法得出这个点,然后继续用来求父节点。

我们可以将每个点开一个堆,然后从子节点合并给父节点。时间复杂度O(n2logn)O(n^2\ log\ n)O(n2 log n)显然无法胜任本题,但我们可以每次合并的时候将小的堆合并到大的堆(启发式合并),那么时间就会被优化到O(nlog2n)O(n\ log^2\ n)O(n log2 n)(每个点最多被合并lognlog\ nlog n次)


codecodecode

#include<cstdio>
#include<queue>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2e5+10;
struct node{ll to,next;
}a[N];
ll ls[N],tot,ans,w[N],id[N],cnt,tmp[N],n;
priority_queue<ll> d[N];
void addl(ll x,ll y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void count_ans(ll x)
{id[x]=++cnt;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;count_ans(y);if(d[id[y]].size()>d[id[x]].size()) swap(id[x],id[y]);ll len=d[id[y]].size();for(ll i=1;i<=len;i++){tmp[i]=max(d[id[x]].top(),d[id[y]].top());d[id[x]].pop();d[id[y]].pop();}for(ll i=1;i<=len;i++)d[id[x]].push(tmp[i]);}d[id[x]].push(w[x]);
}
int main()
{scanf("%lld",&n);for(ll i=1;i<=n;i++)scanf("%lld",&w[i]);for(ll i=2;i<=n;i++){ll x;scanf("%lld",&x);addl(x,i);}count_ans(1);while(!d[id[1]].empty())ans+=d[id[1]].top(),d[id[1]].pop();printf("%lld",ans);
}

P5290-[十二省联考2019]春节十二响【贪心,堆】相关推荐

  1. [十二省联考2019]春节十二响——长链剖分+堆

    题目链接: [十二省联考2019]春节十二响 可以发现每条链上的所有点都要放在不同的段里,那么最多只需要树的深度这么多段就够了. 因为这样可以保证每条链上的点可以放在不同的段中而且一个点放在这些段中一 ...

  2. P5290 [十二省联考2019]春节十二响

    传送门 考虑一个子树里是怎么划分的,维护划分出来的每个集合的最大值,这个可以用一个 $multiset$ 维护 设 $S[x]$ 表示节点 $x$ 的子树中,最优划分 划分出来的每个块的节点最大值 首 ...

  3. 【十二省联考】春节十二响【贪心】【堆】【启发式合并】

    传送门 题意:给一棵nnn个点带点权的树,要求把点分成若干部分,有祖孙关系的点不能在同一部分.求每个部分最大值 的和 的最小值. n≤2×105n \leq 2\times 10^5n≤2×105 由 ...

  4. 十二省联考 2019 题解

    [十二省联考2019]异或粽子 首先异或转前缀和,类似超级钢琴,将三元组 ( l , r , p ) (l,r,p) (l,r,p) 插入堆,表示 s u m [ p ] sum[p] sum[p] ...

  5. 【BZOJ5498】[十二省联考2019]皮配(动态规划)

    [BZOJ5498][十二省联考2019]皮配(动态规划) 题面 BZOJ 洛谷 题解 先考虑暴力\(dp\),设\(f[i][j][k]\)表示前\(i\)所学校,有\(j\)人在某个阵营,有\(k ...

  6. 【十二省联考2019】春节十二响

    题面 https://www.luogu.org/problem/P5290 题解 真的是我傻逼,十二省联考$day2$至今还是我的噩梦.$day1$起码一直在调可持久化$trie$树,$day2$真 ...

  7. 「十二省联考 2019」皮配——dp

    题目 [题目描述] #### 题目背景 一年一度的综艺节目<中国好码农>又开始了.本季度,好码农由 Yazid.Zayid.小 R.大 R 四位梦想导师坐镇,他们都将组建自己的梦想战队,并 ...

  8. HAOI(十二省联考)2019 qwq记

    \(\large{Day\ -1}:\) 放假了,白天大概是抱着最后一次在机房的心态复习着板子过去的.看着机房里的各位神仙丝毫不慌的颓倒是有点慌了,敲了一下多项式的板子感觉写的相当自闭,感觉AFO应该 ...

  9. 十二省联考2019酱油记

    在中考前去省选玩一趟. Day -1 对于一个还没有学会所有省选内容的初三Oier来说,这一趟真的是去打酱油的啊.但还是要认真复习. 最近几天在字符串的路上越走越远-晚上才开始复习图论.还有一大堆没有 ...

最新文章

  1. c:forEach items=${list} var=tt varStatus=status 的相关大小长度
  2. centos配置yum本地源
  3. Web安全——易班优课YOOC课群在线测试自动答题解决方案
  4. 记录Docker in Docker 安装(CentOS7)
  5. 详细学习ORACLE JOBS
  6. 杭州飞畅告诉你工业环网交换机到底是什么?
  7. .NET反射、委托技术与设计模式
  8. C# Winform 窗体美化(七、Win7 Aero 毛玻璃效果)
  9. 批量网站DNS区域传送漏洞检测——bash shell实现
  10. Android 系统(172)---如何使用addr2line命令解析native backtrace
  11. Ubuntu系统下ntp服务器搭建
  12. html5动画在线制作工具,KoolShow-KoolShow(HTML5动画制作工具) v2.4.4 官方版-CE安全网...
  13. 最大公约数简便算法_最大公约数的求法
  14. ARM处理器系统初始化编程注意事项
  15. html+移动端图片点击放大,移动端点击图片放大特效PhotoSwipe.js插件实现
  16. 智能快递柜的电气特性
  17. 移动服务器连接响应慢,移动打开网页速度慢的解决方法
  18. Python-有趣的freegames
  19. 小白也能通俗易懂的联邦学习!
  20. 蓝牙耳机电脑玩游戏进入没声音设置

热门文章

  1. 计算机管理无法连接虚拟磁盘服务,虚拟磁盘服务错误怎么操作【图文教程】
  2. dreamweaver连接mysql数据库 发生一个不知名错误_用DREAMWEAVER连接数据库测试时总是弹出发生一个不知名的错误 你好! 请问一下这个问题你是怎么解的?...
  3. yum java 1.7_centos通过yum安装jdk1.7或1.8
  4. 乐高创意机器人moc_乐高MOC佳作欣赏丨机械之美机器人乐高作品集1
  5. python加油视频教程_TensorFlow 视频教程
  6. python统计字符串中字母个数字母无视大小写_判断一个字符串中字母的个数(无视大小写)...
  7. csdn上修改字体的颜色
  8. java并发之synchronized实现原理及其优化
  9. 每天一小时python官方文档学习(一)————python的简单介绍
  10. 滑动窗口最大值-leetcode 239题