[Apio2012]dispatching
[Apio2012]dispatching
时间限制: 1 Sec 内存限制: 128 MB
题目描述
1 ≤Li ≤ 1,000,000,000 忍者的领导力水平。
输入
输出
输出一个数,表示在预算内顾客的满意度的最大值。
样例输入
样例输出
提示
如果我们选择编号为 1的忍者作为管理者并且派遣第三个和第四个忍者,薪水总和为 4,没有超过总预算4。因为派遣了2个忍者并且管理者的领导力为3,用户的满意度为 2 ,是可以得到的用户满意度的最大值。
题解:
这是一道左偏树的裸题,既可以用深搜,也可以用广搜,深搜简单,广搜直观,小编用的是广搜。
建立左偏树。(用大根堆,因为只跟忍者的个数有关,所以被删除的工资越大越好)
从叶子借点向上广搜,不断合并节点,然后不断删除堆顶直到总工资小于m。
然后广搜入队的时候特判一下,一面忽略叶子节点的可能性。
一下是AC代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
#include<ctime>
using namespace std;
int n,m;
int father[],cnt[];
long long sum[],num[],skill[];
queue<int>mem;
struct node
{
long long key;
int dist;
node *l,*r;
int ldist(){return l?l->dist:;}
int rdist(){return r?r->dist:;}
} man[];
node *pos=man,*root[];
int read()
{
int ans=,f=;
char i=getchar();
while(i<''||i>''){if(i=='-')f=-;i=getchar();}
while(i>=''&&i<=''){ans=ans*+i-'';i=getchar();}
return ans*f;
}
node* merge(node* a,node* b)
{
if(!a||!b)return a?a:b;
if(a->key<b->key)swap(a,b);
a->r=merge(a->r,b);
if(a->ldist()<a->rdist())swap(a->l,a->r);
a->dist=a->rdist()+;
return a;
}
void delet(int x)
{
num[x]--;
sum[x]-=root[x]->key;
root[x]=merge(root[x]->l,root[x]->r);
}
int main()
{
int i,j;
long long ans=;
n=read();
m=read();
for(i=; i<=n; i++)
{
father[i]=read();
cnt[father[i]]++;
scanf("%lld",&sum[i]);
pos++;
pos->key=sum[i];
pos->l=pos->r=NULL;
num[i]=;
root[i]=pos;
scanf("%lld",&skill[i]);
}
for(i=; i<=n; i++)
if(!cnt[i])
{
mem.push(i);
ans=max(ans,skill[i]);
}
while(!mem.empty())
{
int x=mem.front();
mem.pop();
int fa=father[x];
root[fa]=merge(root[fa],root[x]);
cnt[fa]--;
sum[fa]+=sum[x];
num[fa]+=num[x];
if(!cnt[fa])
{
while(sum[fa]>m)delet(fa);
ans=max(ans,skill[fa]*num[fa]);
if(father[fa])mem.push(fa);
}
}
cout<<ans<<endl;
return ;
}
[Apio2012]dispatching的更多相关文章
- 【bzoj2809】[Apio2012]dispatching 左偏树
2016-05-31 15:56:57 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2809 直观的思想是当领导力确定时,尽量选择薪水少的- ...
- BZOJ 2809: [Apio2012]dispatching( 平衡树 + 启发式合并 )
枚举树上的每个结点做管理者, 贪心地取其子树中薪水较低的, 算出这个结点为管理者的满意度, 更新答案. 用平衡树+启发式合并, 时间复杂度为O(N log²N) ------------------- ...
- bzoj2809 [Apio2012]dispatching(左偏树)
[Apio2012]dispatching Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 M ...
- [Apio2012]dispatching 主席树做法
bzoj 2809: [Apio2012]dispatching http://www.lydsy.com/JudgeOnline/problem.php?id=2809 Description 在一 ...
- 【BZOJ2809】[Apio2012]dispatching 可并堆
[BZOJ2809][Apio2012]dispatching Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 M ...
- bzoj 2809: [Apio2012]dispatching -- 可并堆
2809: [Apio2012]dispatching Time Limit: 10 Sec Memory Limit: 128 MB Description 在一个忍者的帮派里,一些忍者们被选中派 ...
- 【BZOJ 2809】2809: [Apio2012]dispatching (左偏树)
2809: [Apio2012]dispatching Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Maste ...
- 2809: [Apio2012]dispatching
2809: [Apio2012]dispatching Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3102 Solved: 1641 [Sub ...
- BZOJ2809: [Apio2012]dispatching
传送门 主席树经典题. 首先把树搞出来,然后搞出来DFS序.然后离散化点权,在DFS序上建立主席树. 对于每个点对应的区间,查找对应的区间最大的点数即可. //BZOJ2809 //by Cydiat ...
随机推荐
- VS2015如何新建C++或者C语言版的lib文件
当我们不想公开我们的代码的时候,可以把我们的代码封装成静态数据连接库,即lib文件.下面介绍下如何生成lib文件. 以VS2015为例,一种是C++版的lib文件,一种是C语言版的lib文件. 一.按 ...
- 1018 Big Number
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- 分针网—IT教育:使用CSS3制作导航条和毛玻璃效果
导航条对于每一个Web前端攻城狮来说并不陌生,但是毛玻璃可能会相对陌生一些.简单的说,毛玻璃其实就是让图片或者背景使用相应的方法进行模糊处理.这种效果对用户来说是十分具有视觉冲击力的.本次分享的主题: ...
- matlab笔记(1) 元胞结构cell2mat和num2cell
摘自于:https://zhidao.baidu.com/question/1987862234171281467.html https://www.zybang.com/question/dcb09 ...
- Mirantis MCP 1.0:OpenStack 和 Kubernetes 整合的第一步
1.前言 Mirantis 公司在2014年9月14日宣布收购 TCPCloud,然后宣布在2017年第一季度会推出全新的私有云产品.从那时候开始,我就一直满怀期待.终于,今年4月19日,Mirant ...
- [刷题]算法竞赛入门经典(第2版) 4-4/UVa253 - Cube painting
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) #include<iostream> char str[15]; v ...
- Appium 1.6.4 环境搭建流程(Java, Android+IOS, Windows+Mac)
Appium1.6.4已经出来一段时间了,快速给大家串一下怎么搭建,贴了下载链接 1 基础环境: Windows + Mac: Java JDK 1.8+ (需配置环境变量),Appium1.6.4的 ...
- Java调用IDL方法总结
Java调用IDL方法总结 Java调用IDL程序,需要先在java中加载IDL的java包(javaidlb.jar),该包不需要下载,在IDL的安装目录中可以直接找到(C:\Program Fil ...
- 张小龙的野心:用小程序重构web|小程序好处及可能的不足
一:张小龙的野心:用小程序重构web 一 很多年以前,张小龙写了一款软件:Foxmail. 这款软件当年有数百万用户,这是一个相当庞大的量,因为彼时网民也只有千万当量级的规模. 我是一个非常忠实的用户 ...
- html学习笔记 - table表格
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...