Gym - 102346D Denouncing Mafia 取k叶子节点使叶子到根覆盖节点数最大
给你一棵树 你可以取K条链 一条链为根到叶子的路径 问你K条链最多覆盖树上多少个节点
贪心的做 肯定是每次取最长链 但是取完最长链 一颗树就会变为若干个森林 我们要维护当前所有森林里的最长链
ans数组记录当前节点子树里的最长链长为多少 dfs到一个节点 就把除了最长链上的儿子的ans全部push到q里(这里可以维护一个最大值来优化掉优先队列qq)
然后最后把ans[1] push到q里 取最大的k个即可
为什么这么做是正确的 因为优先队列q里存的是每个节点的父亲节点去掉最长链后自己当根节点时子树的最长链长度
我们每次贪心就是从若干个森林里取出最长链最长的哪条消掉 所以直接取q的前k个即可
#include<bits/stdc++.h>
using namespace std;
vector<int> g[];
int ans[];
priority_queue<int> q;
void dfs(int x) {
priority_queue<int> qq;
ans[x] = ;
for (int v : g[x]) {
dfs(v);
qq.push(ans[v]);
}
if (g[x].size()) {
ans[x] = qq.top() + ;
qq.pop();
while (qq.size()) {
q.push(qq.top());
qq.pop();
}
}
}
int main() {
int n, k, x;
scanf("%d %d", &n, &k);
for (int i = ; i <= n; i++) {
scanf("%d", &x);
g[x].push_back(i);
}
int anser = ;
dfs();
q.push(ans[]);
while (k--&&q.size()) {
anser += q.top();
q.pop();
}
printf("%d\n", anser);
}
Gym - 102346D Denouncing Mafia 取k叶子节点使叶子到根覆盖节点数最大的更多相关文章
- hdu 5088 高斯消元n堆石子取k堆石子使剩余异或值为0
http://acm.hdu.edu.cn/showproblem.php?pid=5088 求能否去掉几堆石子使得nim游戏胜利 我们可以把题目转化成求n堆石子中的k堆石子数异或为0的情况数.使用x ...
- 设计一个算法,求非空二叉树中指定的第k层(k>1)的叶子节点的个数
思想:採用基于层序遍历的方法. 用level扫描各层节点,若某一层的节点出队后.rear指向该层中最右节点.则将rear赋值给last(对于第一层.last=1).在出队时,若front=last,表 ...
- D - Denouncing Mafia DFS
这道题其实很简单,求k个到根的链,使得链上的节点的个数尽可能多,如果节点被计算过了,就不能再被计算了,其实我们发现,只要k>=叶子节点,那么肯定是全部,所以我们考虑所有的叶子节点,DFS到根节点 ...
- Jquery EasyUI Combotree只能选择叶子节点且叶子节点有多选框
Jquery EasyUI Combotree只能选择叶子节点且叶子节点有多选框 Jquery EasyUI Combotree单选框,Jquery EasyUI Combotree只能选择叶子节点 ...
- Z-tree 统计每一父节点的叶子节点数(看这一篇就够了)
最近刚走出校园的我找到了第一份工作,在入职考核中就遇见了一道Z-tree的试题 这道题目本身是不难的,但是我第一次接触这个插件而且还把解决问题的方向搞错了,弄的我好几天都很难受. 弄得我都开始怀疑人生 ...
- 找出所有从根节点到叶子节点路径和等于n的路径并输出
//找出所有从根节点到叶子节点路径和等于n的路径并输出 Stack<Node> stack = new Stack<Node>(); public void findPath( ...
- MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)
背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有子节点(包含路径上的枝干节点和叶子节点) 枝干节点:如果一个节点下还有子节点,则为枝干节点. 叶子节点:如果一个节点下不再有子节点 ...
- 求二叉树的深度,从根节点到叶子节点的最大值,以及最大路径(python代码实现)
首先定义一个节点类,包含三个成员变量,分别是节点值,左指针,右指针,如下代码所示: class Node(object): def __init__(self, value): self.value ...
- 左神算法书籍《程序员代码面试指南》——2_03删除链表的中间节点和a/b处的节点
[题目]给定链表的头节点head,实现删除链表的中间节点的函数.例如:不删除任何节点:1->2,删除节点1:1->2->3,删除节点2:1->2->3->4,删除节 ...
随机推荐
- 06点睛Spring4.1-Bean的初始化和销毁
6.1 Initialization和Destruction spring对bean初始化的时候和销毁时候进行某些操作提供了支持 利用@Bean的initMethod和destroyMethod(和x ...
- Eureka&Zookeeper&Consul 原理与对比
CAP 定理CAP定理:CAP定理又称CAP原则,指的是在一个分布式系统中,一致性(Consistency).可用性(Availability).分区容错性(Partition tolerance). ...
- 【GStreamer开发】GStreamer基础教程15——继承Clutter
目标 Clutter是一个开源的库,用来创建快速.可移植和动态的GUI.GStreamer可以通过cluttersink这个element把clutter集成进来,允许视频像纹理一样使用.本教程会展示 ...
- linux系统界面转换
普通使用的切换: 命令行->图形 startx 或者 ctrl+alt+F7切换到图形界面,虚拟机里面使用Alt+F7返回到图形界面 图形->命令行 Ctrl+Alt+F1--F6 如果想 ...
- 使用jmeter HTTP代理服务器录制APP脚本
使用jmeter HTTP代理服务器录制APP脚本 步骤一.jemter设置 1.启动JMeter,双击运行jmeter.bat,启动jmeter jmeter运行主界面 2.添加线程组:右键测试计划 ...
- jQuery (js 和 jQuery 的区别)
js 和 jQuery 的区别 主要体现在Dom操作 (jq代表我找到的元素对象)找元素: js:document.get... jquery: $(选择器)设定:jq 是jquery对 ...
- go io.Reader 接口
io 包指定了 io.Reader 接口, 它表示从数据流结尾读取. Go 标准库包含了这个接口的许多实现, 包括文件.网络连接.压缩.加密等等. io.Reader 接口有一个 Read 方法: f ...
- jenkins pipline
def getHost(){ def remote = [:] remote.name = 'server02' remote.host = '39.19.90' remote.user = 'roo ...
- vue+iview的form表单校验总结
这篇文章时关于如何使用iview的form表单校验.主要学习如何使用form校验(以校验文字长度为例),以及如何动态添加校验规则和异步校验. 1.为需要校验的表单添加form标签 <!--注意: ...
- 写在NOIP2018后
退役学了一周文化课,感觉还行吧 在周四就有学弟跟我说用我的源代码测329,当时还是出乎意料的. 本来期望是100+50+55+100+50+44=399,结果测得是100+55+50+100+20+4 ...