[BZOJ2809]dispatching
Description
Input
Output
Sample Input
0 3 3
1 3 5
2 2 2
1 2 4
2 3 1
Sample Output
HINT
如果我们选择编号为 1的忍者作为管理者并且派遣第三个和第四个忍者,薪水总和为 4,没有超过总预算4。因为派遣了 2 个忍者并且管理者的领导力为3,用户的满意度为 2,是可以得到的用户满意度的最大值。
Source
对于每个点我们要选择子树内权值最小的若干个点,这是一个很显然的贪心思想,于是用大根堆维护每个子树内权值和不超过$m$的一个点集,合并的时候一直弹堆顶直到当前的权值和小于$m$
代码:
#include<iostream>
#include<cstdio>
#define M 200010
#define ll long long
using namespace std;
int n,num,root;
int head[M],size[M],d[M],rt[M],ch[M][];
ll m,ans,val[M],l[M],sum[M];
struct point{int to,next;}e[M<<];
void add(int from,int to)
{
e[++num].next=head[from];
e[num].to=to;
head[from]=num;
}
int merge(int x,int y)
{
if(!x||!y) return x+y;
if(val[x]<val[y]) swap(x,y);
ch[x][]=merge(ch[x][],y);
if(d[ch[x][]]<d[ch[x][]]) swap(ch[x][],ch[x][]);
d[x]=d[ch[x][]]+;
return x;
}
void dfs(int x,int fa)
{
rt[x]=x,sum[x]=val[x],size[x]=;
for(int i=head[x];i;i=e[i].next)
{
int to=e[i].to;
if(to==fa) continue;
dfs(to,x),size[x]+=size[to],sum[x]+=sum[to];
rt[x]=merge(rt[x],rt[to]);
}
while(sum[x]>m)
{
sum[x]-=val[rt[x]],size[x]--;
rt[x]=merge(ch[rt[x]][],ch[rt[x]][]);
}
ans=max(ans,1ll*size[x]*l[x]);
}
int main()
{
scanf("%d%lld",&n,&m);
for(int i=;i<=n;i++)
{
int x;scanf("%d%lld%lld",&x,&val[i],&l[i]);
if(x) add(x,i),add(i,x);
else root=i;
}
dfs(root,);
printf("%lld\n",ans);
return ;
}
[BZOJ2809]dispatching的更多相关文章
- bzoj1455: 罗马游戏 + bzoj2809: Dispatching(可并堆)
昨天看了可并堆是什么,写的是左偏树 大概就是一棵树 1.有左偏性质,即当前根到左叶子节点距离比到右叶子节点距离大 2.有堆性质,堆顶关键字比子树关键字小 合并两个堆的时候,关键字大的插入到关键字小的那 ...
- BZOJ2809 dispatching 【可并堆】
题目分析: yy一下就知道了,合并用可并堆少个log. 代码: #include<bits/stdc++.h> using namespace std; ; int n,m; int b[ ...
- BZOJ2809 dispatching(左偏树)
在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级.为保密,同时增强忍者们的 ...
- BZOJ2809: [Apio2012]dispatching
传送门 主席树经典题. 首先把树搞出来,然后搞出来DFS序.然后离散化点权,在DFS序上建立主席树. 对于每个点对应的区间,查找对应的区间最大的点数即可. //BZOJ2809 //by Cydiat ...
- 【BZOJ2809】[Apio2012]dispatching 可并堆
[BZOJ2809][Apio2012]dispatching Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 M ...
- 【bzoj2809】 Apio2012—dispatching
http://www.lydsy.com/JudgeOnline/problem.php?id=2809 (题目链接) 题意 给出一棵树,每个节点有两个权值${c}$,${L}$,分别代表花费和领导力 ...
- 【bzoj2809】[Apio2012]dispatching 左偏树
2016-05-31 15:56:57 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2809 直观的思想是当领导力确定时,尽量选择薪水少的- ...
- 【BZOJ-2809】dispatching派遣 Splay + 启发式合并
2809: [Apio2012]dispatching Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2334 Solved: 1192[Submi ...
- bzoj2809 [Apio2012]dispatching(左偏树)
[Apio2012]dispatching Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 M ...
随机推荐
- Struts文件下载(静态)
前言:在实际的开发中,我们可能需要动态下载和静态下载, 动态下载:例如我上传了一个文件,你想下载,那就必须动态生成下载链接,因为我服务器一开始是不知道我上传的东西是什么,放在那里, 静态下载:比如一些 ...
- _init_() got an unexpected keyword argument ‘shape’
按照<TensorFlow:实战Google深度学习框架>一书学习的tensorflow,书中使用的是0.9.0版本,而我安装的是1.11.0 如果按照书上的例子来,因为这本书使用tens ...
- Service Mesh服务网格:是什么和为什么
Service Mesh服务网格:是什么和为什么 - 好雨云帮 CSDN 博客 - CSDN博客 https://blog.csdn.net/zyqduron/article/details/8043 ...
- TIME_WAIT Accumulation and Port Exhaustion
客户端实现连接的唯一性 HTTP The Definitive Guide 4.2.7 TIME_WAIT Accumulation and Port Exhaustion TIME_WAIT por ...
- linux UIO
UIO(linux Userspace I/O子系统)用户空间设备驱动I/O技术介绍(由www.169it.com搜集整理) UIO(Userspace I/O)是运行在用户空间的I/O技术.Linu ...
- js foreach
array1.forEach(callbackfn[, thisArg]) 参数 定义 array1 必需. 一个数组对象. callbackfn 必需. 一个接受最多三个参数的函数. 对于数组中的每 ...
- opencv 角点检测+相机标定+去畸变+重投影误差计算
https://blog.csdn.net/u010128736/article/details/52875137 https://blog.csdn.net/h532600610/article/d ...
- postgresql导出sql执行结果到文件的方法(转)
原文:http://blog.sina.com.cn/s/blog_840dd283010178jz.html 对于一些特殊字符,比如字符
- 爬虫之urllib包以及request模块和parse模块
urllib简介 简介 Python3中将python2.7的urllib和urllib2两个包合并成了一个urllib库 Python3中,urllib库包含有四个模块: urllib.reques ...
- Oracle 实现拆分列数据的split()方法
-- 创建需要划分的字符串 with T1 as( select 'one,two,three,four,five,six,seven,eight,nine,zero' as source_strin ...