博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
p1552 [APIO2012]派遣
阅读量:6818 次
发布时间:2019-06-26

本文共 1037 字,大约阅读时间需要 3 分钟。

分析

首先这个题有两个坑点

一是一个点不管可以由父亲领导,任何祖宗均可领导

而是根节点的花费要算在总费用中且它自己也算在总节点数量中

于是我们考虑如何求答案

首先我们知道对于一个点如果在一个子树中就没有选则在更大的一棵子树中一定不会选

因为一棵大的子树有更多选择,结果肯定不会比它的子树劣

于是我们可以每个节点开一个优先队列,每次将超过范围的点直接删掉

于是合并两棵子树是暴力启发式合并即可

代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define int long longvector
v[100100];int c[100100],l[100100],now[100100],d[100100],sum[100100],n,m,Ans;priority_queue
q[100100];inline void mer(int u,int x,int y){ if(q[x].size()
m){ sum[x]-=q[now[x]].top(); q[now[x]].pop(); }}inline void work(int x){ now[x]=x; q[now[x]].push(c[x]); sum[x]+=c[x]; for(int i=0;i
Ans)Ans=y*l[x];}signed main(){ int i,j,k; scanf("%lld%lld",&n,&m); for(i=1;i<=n;i++){ scanf("%lld%lld%lld",&k,&c[i],&l[i]); if(k){ v[k].push_back(i); d[i]++; } } for(i=1;i<=n;i++) if(!d[i])work(i); cout<

转载于:https://www.cnblogs.com/yzxverygood/p/10353088.html

你可能感兴趣的文章
Android 开发工具下载中文网站
查看>>
Redis 列表处理
查看>>
The vim syntax of systemd unit file
查看>>
关于Linux库文件的制作--普通的静态库、动态库
查看>>
yum install tomcat
查看>>
android 股票数据通过日K获取周K的数据 算法 源码
查看>>
关于Linux运维的一些题目总结
查看>>
原生js实现查询天气的小应用
查看>>
分享两个必应壁纸接口,可用来获取高质量壁纸和故事
查看>>
tomcat启动脚本
查看>>
ASP.NET-FineUI开发实践-10
查看>>
小猪决定做一件尝试
查看>>
linux下jdk的安装:
查看>>
Ajax_ajax模板引擎 ---tmplate.js处理数据和标签拼接
查看>>
微信小程序-下拉松开弹不回去顶部留一段空白
查看>>
[摘录]感受弗兰克尔的故事
查看>>
jmeter响应时间与postman响应时间为什么不一样?
查看>>
HTTPonly属性
查看>>
显示磁盘信息
查看>>
基于spark和sparkstreaming的word2vec
查看>>