BZOJ2809 dispatching 【可并堆】
题目分析:
yy一下就知道了,合并用可并堆少个log。
代码:
#include<bits/stdc++.h>
using namespace std; const int maxn = ; int n,m;
int b[maxn],c[maxn],l[maxn],sz[maxn];
long long tot[maxn];
int dis[maxn],val[maxn],ch[maxn][],pts[maxn];
vector <int> g[maxn];
long long ans = ; int merge(int r1,int r2){
if(r1 == ) return r2; if(r2 == ) return r1;
if(val[r1] > val[r2]){
ch[r1][] = merge(ch[r1][],r2);
if(dis[ch[r1][]] < dis[ch[r1][]]) swap(ch[r1][],ch[r1][]);
if(ch[r1][]) dis[r1] = dis[ch[r1][]] + ;
else dis[r1] = ;
return r1;
}else{
ch[r2][] = merge(r1,ch[r2][]);
if(dis[ch[r2][]] < dis[ch[r2][]]) swap(ch[r2][],ch[r2][]);
if(ch[r2][]) dis[r2] = dis[ch[r2][]] + ;
else dis[r2] = ;
return r2;
}
} void read(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d%d%d",&b[i],&c[i],&l[i]);
for(int i=;i<=n;i++){g[b[i]].push_back(i);}
} void dfs(int now){
for(int i=;i<g[now].size();i++){
dfs(g[now][i]);
sz[now] += sz[g[now][i]];
tot[now] += tot[g[now][i]];
}
sz[now]++; tot[now] += c[now];
for(int i=;i<g[now].size();i++)pts[now]=merge(pts[now],pts[g[now][i]]);
while(tot[now] > m){
tot[now] -= val[pts[now]];sz[now]--;
pts[now] = merge(ch[pts[now]][],ch[pts[now]][]);
}
ans = max(ans,1ll*l[now]*sz[now]);
} void work(){
for(int i=;i<=n;i++) pts[i] = i,val[i] = c[i];
dfs(g[][]);
printf("%lld",ans);
} int main(){
read();
work();
return ;
}
BZOJ2809 dispatching 【可并堆】的更多相关文章
- 【BZOJ2809】[Apio2012]dispatching 可并堆
[BZOJ2809][Apio2012]dispatching Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 M ...
- bzoj1455: 罗马游戏 + bzoj2809: Dispatching(可并堆)
昨天看了可并堆是什么,写的是左偏树 大概就是一棵树 1.有左偏性质,即当前根到左叶子节点距离比到右叶子节点距离大 2.有堆性质,堆顶关键字比子树关键字小 合并两个堆的时候,关键字大的插入到关键字小的那 ...
- BZOJ2809 [Apio2012]dispatching 可并堆
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2809 题意概括 n个点组成一棵树,每个点都有一个领导力和费用,可以让一个点当领导,然后在这个点的子 ...
- bzoj 2809: [Apio2012]dispatching -- 可并堆
2809: [Apio2012]dispatching Time Limit: 10 Sec Memory Limit: 128 MB Description 在一个忍者的帮派里,一些忍者们被选中派 ...
- [BZOJ2809]dispatching
Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级. ...
- BZOJ 2809 [Apio2012]dispatching(斜堆+树形DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2809 [题目大意] 给出一棵树,求出每个点有个权值,和一个乘算值,请选取一棵子树, 并 ...
- BZOJ2809 dispatching(左偏树)
在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级.为保密,同时增强忍者们的 ...
- 2809: [Apio2012]dispatching 可并堆 左偏树
https://www.lydsy.com/JudgeOnline/problem.php?id=2809 板子题wa了一下因为输出ans没有lld #include<iostream> ...
- 【bzoj2809】[Apio2012]dispatching 贪心+可并堆
题目描述 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级.为保密,同时增 ...
随机推荐
- 配置Nginx虚拟主机
实验环境 一台最小化安装的CentOS 7.3虚拟机 配置基本环境 1. 安装nginx yum install -y epel-* yum isntall -y nginx vim 2. 建立虚机主 ...
- 官宣 ! 52abp_Pro版本低调上线
上线了 官宣!官宣!官宣! 重要的事情说三次. 是的,你没有看错 https://www.52abp.com/ 的官方企业模板:52abp-pro已经正式上线. 至此52abp.com的官方网站就算告 ...
- SVM(支持向量机)之Hinge Loss解释
Hinge Loss 解释 SVM 求解使通过建立二次规划原始问题,引入拉格朗日乘子法,然后转换成对偶的形式去求解,这是一种理论非常充实的解法.这里换一种角度来思考,在机器学习领域,一般的做法是经验风 ...
- 剑指offer 第十一天
46.扑克牌顺子 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的 ...
- c++入门之——const在函数名前面和函数后面的区别
class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前 ...
- 记一个JS树结构路径查找
var a=[ { "id" : "0000", "text" : "R1", "children" ...
- 正则表达式验证input文本框
方便以后的查找,直接copy代码在这里了. eg: //公司邮箱验证 if ($("#Email").val() != "") { var myreg = /^ ...
- 设置永久环境变量linux
========================================================================== http://www.cnblogs.com/Bi ...
- python基础之数据类型和数值类型
python3的六大数据类型: 1.tuple元组 2.number数字 3.string字符串 4.set集合 5.list列表 6.dictionary字典 其中不可变数据3个:tuple.num ...
- PyCharm3.0默认快捷键
PyCharm3.0默认快捷键(翻译的) 1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性) Ctrl + Alt + Space 快速导入任意类 Ctrl + S ...