给你一棵树 你可以取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叶子节点使叶子到根覆盖节点数最大的更多相关文章

  1. hdu 5088 高斯消元n堆石子取k堆石子使剩余异或值为0

    http://acm.hdu.edu.cn/showproblem.php?pid=5088 求能否去掉几堆石子使得nim游戏胜利 我们可以把题目转化成求n堆石子中的k堆石子数异或为0的情况数.使用x ...

  2. 设计一个算法,求非空二叉树中指定的第k层(k&gt;1)的叶子节点的个数

    思想:採用基于层序遍历的方法. 用level扫描各层节点,若某一层的节点出队后.rear指向该层中最右节点.则将rear赋值给last(对于第一层.last=1).在出队时,若front=last,表 ...

  3. D - Denouncing Mafia DFS

    这道题其实很简单,求k个到根的链,使得链上的节点的个数尽可能多,如果节点被计算过了,就不能再被计算了,其实我们发现,只要k>=叶子节点,那么肯定是全部,所以我们考虑所有的叶子节点,DFS到根节点 ...

  4. Jquery EasyUI Combotree只能选择叶子节点且叶子节点有多选框

    Jquery EasyUI Combotree只能选择叶子节点且叶子节点有多选框 Jquery EasyUI Combotree单选框,Jquery EasyUI Combotree只能选择叶子节点 ...

  5. Z-tree 统计每一父节点的叶子节点数(看这一篇就够了)

    最近刚走出校园的我找到了第一份工作,在入职考核中就遇见了一道Z-tree的试题 这道题目本身是不难的,但是我第一次接触这个插件而且还把解决问题的方向搞错了,弄的我好几天都很难受. 弄得我都开始怀疑人生 ...

  6. 找出所有从根节点到叶子节点路径和等于n的路径并输出

    //找出所有从根节点到叶子节点路径和等于n的路径并输出 Stack<Node> stack = new Stack<Node>(); public void findPath( ...

  7. MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)

    背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有子节点(包含路径上的枝干节点和叶子节点) 枝干节点:如果一个节点下还有子节点,则为枝干节点. 叶子节点:如果一个节点下不再有子节点 ...

  8. 求二叉树的深度,从根节点到叶子节点的最大值,以及最大路径(python代码实现)

    首先定义一个节点类,包含三个成员变量,分别是节点值,左指针,右指针,如下代码所示: class Node(object): def __init__(self, value): self.value ...

  9. 左神算法书籍《程序员代码面试指南》——2_03删除链表的中间节点和a/b处的节点

    [题目]给定链表的头节点head,实现删除链表的中间节点的函数.例如:不删除任何节点:1->2,删除节点1:1->2->3,删除节点2:1->2->3->4,删除节 ...

随机推荐

  1. RobotFramework: 获取当前时间戳

    robot中先导入DateTime库 #获取当前时间:2019-07-31 10:46:29.940 ${time} Get Current Date result_format=timestamp ...

  2. idea安装阿里云插件和sonar插件

    重启idea

  3. PHP 数据库连接

    $db = new MySQLi("localhost","root","123","php0307"); !mysql ...

  4. 遨游TypeScript海洋之定义变量和数据类型

    变量和数据类型 熟悉JavaScript的小伙伴都知道,typescript是JavaScript的超集,也就是说它包含JavaScript.所以我觉得,只要你想拥有更佳的模块管理,让你的开发更佳严谨 ...

  5. .net core中关于System.Text.Json的使用

    在.Net Framework的时候序列化经常使用Newtonsoft.Json插件来使用,而在.Net Core中自带了System.Text.Json,号称性能更好,今天抽空就来捣鼓一下. 使用起 ...

  6. SpringBoot部署到Linux上AppserverApplication,访问不到控制层

    放在本地是好好的,可以请求到,放到Linux上去的话就直接404, 解决办法: SpringBoot有个加载类叫AppserverApplication.这个大家应该都知道,我们平常都是如下写: @S ...

  7. matlab中执行mex文件时提示GLIBCXX not found

    解决方案参考: http://stackoverflow.com/questions/8421708/glibcxx-not-found-when-compiling-vtk-example-unde ...

  8. Jenkins+maven+gitlab自动化部署之前端构建发布(六)

    前端项目构建,需要在jenkins主机部署node服务,网上有说介绍说安装对应的nodejs插件进行前端项目构建,我这里是直接调用系统npm命令,进行前端打包.具体node部署参考:Centos7部署 ...

  9. Tp5.1 管理后台开发纪要

    1. tp5.1 对网页是有缓存机制的 E:\phpStudy\PHPTutorial\WWW\NewAdmin\thinkphp\library\think\Template.php 下displa ...

  10. Eclipse控制台不限日志行数

    在使用Eclipse时,如果控制台输出的内容比较多,控制台之前的内容就会消失,导致前面的控制台打印信息无法查看. 设置Eclipse的控制台属性 设置方法: 打开Eclipse的菜单栏:Window ...