#左偏树,树形dp#洛谷 1552 [APIO2012]派遣
分析
那我指定管理层之后,选择薪水越小的人越好,
考虑小根堆,由于需要合并,所以采用左偏树
代码
#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
const int N=100011; typedef long long lll;
struct node{int y,next;}e[N];
int n,siz[N],lead[N],as[N],et; lll ans,m,c[N];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
struct Leftist_Tree{
int rt[N],son[N][2],w[N],d[N];
inline signed Merge(int fi,int se){
if (!fi||!se) return fi|se;
if (w[fi]<w[se]) swap(fi,se);
son[fi][1]=Merge(son[fi][1],se);
if (d[son[fi][0]]<d[son[fi][1]]) swap(son[fi][0],son[fi][1]);
d[fi]=d[son[fi][1]]+1;
return fi;
}
inline signed Pop(int now){
rr int t1=son[now][0],t2=son[now][1];
rt[t1]=t1,rt[t2]=t2,w[now]=-1,
son[now][0]=son[now][1]=d[now]=0;
return Merge(t1,t2);
}
}Tre;
inline void dfs(int x){
for (rr int i=as[x];i;i=e[i].next){
dfs(e[i].y);
Tre.rt[x]=Tre.Merge(Tre.rt[x],Tre.rt[e[i].y]);
c[x]+=c[e[i].y],siz[x]+=siz[e[i].y];
}
while (c[x]>m){
c[x]-=Tre.w[Tre.rt[x]],--siz[x],
Tre.rt[x]=Tre.Pop(Tre.rt[x]);
}
ans=max(ans,1ll*lead[x]*siz[x]);
}
signed main(){
n=iut(),m=iut(),Tre.d[0]=-1;
for (rr int i=1;i<=n;++i){
rr int F=iut(); if (F) e[++et]=(node){i,as[F]},as[F]=et;
c[i]=Tre.w[i]=iut(),Tre.rt[i]=i,lead[i]=iut(),siz[i]=1;
}
dfs(1);
return !printf("%lld",ans);
}
#左偏树,树形dp#洛谷 1552 [APIO2012]派遣的更多相关文章
- 洛谷1552 [APIO2012]派遣
洛谷1552 [APIO2012]派遣 原题链接 题解 luogu上被刷到了省选/NOI- ...不至于吧 这题似乎有很多办法乱搞? 对于一个点,如果他当管理者,那选的肯定是他子树中薪水最少的k个,而 ...
- 洛谷P1552 [APIO2012] 派遣 [左偏树,树形DP]
题目传送门 忍者 Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都 ...
- 洛谷P1552 [APIO2012]派遣(左偏树)
传送门 做这题的时候现学了一波左偏树2333(好吧其实是当初打完板子就给忘了) 不难发现肯定是选子树里权值最小的点且选得越多越好 但如果在每一个点维护一个小根堆,我们得一直找知道权值大于m为止,时间会 ...
- [洛谷P1552] [APIO2012]派遣(左偏树)
这道题是我做的左偏树的入门题,奈何还是看了zsy大佬的题解才能过,唉,我太弱了. 左偏树总结 Part 1 理解题目 很显然,通过管理关系的不断连边,最后连出来的肯定是一棵树,那么不难得出,当一个忍者 ...
- POJ3016-K-Monotonic(左偏树+DP)
我觉得我要改一下签名了……怎么会有窝这么啰嗦的人呢? 做这题需要先学习左偏树<左偏树的特点及其应用> 然后做一下POJ3666,这题的简单版. 思路: 考虑一下维护中位数的过程原数组为A, ...
- POJ3666-Making the Grade(左偏树 or DP)
左偏树 炒鸡棒的论文<左偏树的特点及其应用> 虽然题目要求比论文多了一个条件,但是……只需要求非递减就可以AC……数据好弱…… 虽然还没想明白为什么,但是应该觉得应该是这样——求非递减用大 ...
- 树形DP 洛谷P2014 选课
洛谷P2014 选课 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门 ...
- [洛谷P1552][APIO2012]派遣
题目大意:有一棵$n$个点的树,和一个费用$m$,每个点有一个费用和价值,请选一个点,再从它的子树中选取若干个点,使得那个点的价值乘上选的点的个数最大,要求选的点费用总和小于等于$m$ 题解:树形$d ...
- 2018.07.31洛谷P1552 [APIO2012]派遣(可并堆)
传送门 貌似是个可并堆的模板题,笔者懒得写左偏堆了,直接随机堆水过.实际上这题就是维护一个可合并的大根堆一直从叶子合并到根,如果堆中所有数的和超过了上限就一直弹直到所有数的和不超过上限为止,最后对于当 ...
- 洛谷 P3377 【模板】左偏树(可并堆)
洛谷 P3377 [模板]左偏树(可并堆) 题目描述 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或 ...
随机推荐
- windows下redis安装与使用
下载 redis下载地址 步骤,一直下一步按就完事了,记得勾选添加到环境配置 其中建议自定义路径吧,文件夹名字Redis,一定要大写,小写不来事. 安装完后 启动命令 找到你安装redis的文件夹,在 ...
- Ubuntu如何卸载mysql
首先在终端中查看MySQL的依赖项:dpkg --list|grep mysql 卸载: sudo apt-get remove mysql-common 卸载:sudo apt-get autore ...
- 【Azure 环境】Update-MgEntitlementManagementAccessPackageAssignmentPolicy 命令执行时候遇见的 No HTTP Resource was found 问题分析
Microsoft Graph PowerShell SDK: acts as an API wrapper for the Microsoft Graph APIs, exposing the en ...
- 图查询语言 nGQL 简明教程 vol.01 快速入门
本文旨在让新手快速了解 nGQL,掌握方向,之后可以脚踩在地上借助文档写出任何心中的 NebulaGraph 图查询. 视频 本教程的视频版在B站这里. 准备工作 在正式开始 nGQL 实操之前,记得 ...
- Docker下搭建Redis集群并实现动态扩/缩容
一.Redis集群方案的简单介绍 Redis集群的方案一般分为三种: 哈希取余分区 一致性哈希算法分区 哈希槽分区(本文介绍的就是这种) 1.哈希取余分区: 优点: 简单粗暴,只要提前预估好数据量,然 ...
- web项目开发写接口时,为什么需要在关键位置打印日志-2022新项目
一.业务场景 最近在开发新功能,新功能主要就是写app的首页查询接口,接口比较多有十几个,首页会有各种查询,新增操作比较少.由于用户量 比较大,据说并发量不小,所以首页的很多查询都做了缓存处理,用来提 ...
- vscode 当做记事本,用任务 tasks 自动提交git - ctrl shift B
vscode 当做记事本,用任务 tasks 自动提交git - ctrl shift B 起因 开始用的joplin 本地记事本挺好,唯一缺点不能同步. 用了一下,发现markdown是两栏的,变成 ...
- 摆脱鼠标系列 - 用git命令提交代码
需求 最近开始改变用鼠标的习惯,之前一直是用鼠标点击vscode,点击提交 现在不用鼠标,改用命令行,命令很简单,主要是习惯的改变 实现 vscode环境 ctrl + ` 快捷键打开命令行 git ...
- koa 文件下载 pdf预览 两个接口 - nodejs - chromeDownload chromePreview
koa 文件下载 pdf预览 两个接口 - nodejs - chromeDownload chromePreview chrome.js const router = require("k ...
- think about 和 think of 区别
about 是 on by out 简称 about 在旁边 在外围 周边 think about you 想你有关的事 of 是 belong to 什么什么的 of指的是 这个人或者这个事本身相关 ...