P1552 [APIO2012] 派遣

news/2024/12/26 22:11:05/文章来源:https://www.cnblogs.com/LG017/p/18634314

P1552 [APIO2012] 派遣

题目背景

在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿。

题目描述

在这个帮派里,有一名忍者被称之为 Master。除了 Master 以外,每名忍者都有且仅有一个上级。为保密,同时增强忍者们的领导力,所有与他们工作相关的指令总是由上级发送给他的直接下属,而不允许通过其他的方式发送。

现在你要招募一批忍者,并把它们派遣给顾客。你需要为每个被派遣的忍者支付一定的薪水,同时使得支付的薪水总额不超过你的预算。另外,为了发送指令,你需要选择一名忍者作为管理者,要求这个管理者可以向所有被派遣的忍者发送指令,在发送指令时,任何忍者(不管是否被派遣)都可以作为消息的传递人。管理者自己可以被派遣,也可以不被派遣。当然,如果管理者没有被排遣,你就不需要支付管理者的薪水。

你的目标是在预算内使顾客的满意度最大。这里定义顾客的满意度为派遣的忍者总数乘以管理者的领导力水平,其中每个忍者的领导力水平也是一定的。

写一个程序,给定每一个忍者 \(i\) 的上级 \(B_i\),薪水 \(C_i\),领导力 \(L_i\),以及支付给忍者们的薪水总预算 \(M\),输出在预算内满足上述要求时顾客满意度的最大值。

提示

\(1 \le N \le 10^5\)\(1 \le M \le 10^9\)\(0 \le B_i \lt i\)\(1 \le C_i \le M\)\(1 \le L_i \le 10^9\)

Solution:

十分简单的线段树合并.

对于每个点开一颗权值线段树来维护其子树下的薪水 $$C$$ 的分布情况,然后向上合并。

对于答案统计,查询在改点下以 $$m$$ 的代价能派遣的最多忍者数 $$tmp$$ 然后 $$ans_{x}=tmp_{x}*L_{x}$$

然后这题就欢乐的做完了

Code:

#include<bits/stdc++.h>
#define ll long long
const int N=1e5+5;
const int inf=1e9;
using namespace std;
struct Segment_Tree{int rt[N],cnt;struct Tree{int ls,rs,cnt;ll val;}t[N*40];void pushup(int x){t[x].cnt=t[t[x].ls].cnt+t[t[x].rs].cnt;t[x].val=t[t[x].ls].val+t[t[x].rs].val;}int merge(int x,int y,int l,int r){if(!x||!y)return x|y;if(l==r){t[x].cnt+=t[y].cnt,t[x].val+=t[y].val;return x;}int mid=l+r>>1;t[x].ls=merge(t[x].ls,t[y].ls,l,mid);t[x].rs=merge(t[x].rs,t[y].rs,mid+1,r);pushup(x);return x;}void insert(int &x,int l,int r,int pos){t[x= (x ? x : ++cnt)].cnt++;t[x].val+=pos;if(l==r)return ;int mid=l+r>>1;if(pos<=mid)insert(t[x].ls,l,mid,pos);if(mid<pos)insert(t[x].rs,mid+1,r,pos);}void query(int x,int l,int r,int &k,ll &res){if(!x||!k)return;if(t[x].val<=k){k-=t[x].val,res+=t[x].cnt;return ;}if(l==r){if(k<t[x].val){res+=k/l,k=0;}return;}int mid=l+r>>1;if(l<=k)query(t[x].ls,l,mid,k,res);if(mid+1<=k)query(t[x].rs,mid+1,r,k,res);return;}
}T;
struct Edge{int y,nxt;
}e[N<<1];
int head[N];
void add(int x,int y)
{e[++head[0]]=Edge{y,head[x]};head[x]=head[0];
}
int cost[N],lead[N];
int n,m;
ll ans;
inline ll Max(ll x,ll y){return x>y ? x : y;}
void dfs(int x)
{T.insert(T.rt[x],1,inf,cost[x]);for(int i=head[x],y;i;i=e[i].nxt){y=e[i].y;dfs(y);T.merge(T.rt[x],T.rt[y],1,inf);}ll tmp=0;int k=m;T.query(T.rt[x],1,inf,k,tmp);tmp=1ll*tmp*lead[x];//cout<<x<<"="<<tmp<<"\n";ans =  Max(ans,tmp);
}
void work()
{cin>>n>>m;for(int y=1,x;y<=n;y++){scanf("%d%d%d",&x,&cost[y],&lead[y]);add(x,y);}dfs(1);printf("%lld",ans);
}
int main()
{//freopen("dispatch.in","r",stdin);freopen("dispatch.out","w",stdout);work();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/859484.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8086汇编(16位汇编)学习笔记05.asm基础语法和串操作

https://bpsend.net/thread-121-1-2.htmlasm基础语法 1. 环境配置xp环境配置 1.拷贝masm615到指定目录 2.将masm615目录添加进环境变量 3.在cmd中输入ml,可以识别即配置成功dosbox环境配置 1.拷贝masm611到指定目录 2.将masm611所在目录添挂载进dosbox 3.将masm611目录在dosbo…

WinNTSetup 系统安装利器 v5.4.0 单文件版

软件介绍 WinNTSetup,系统安装利器,目前最好用的系统安装器,Windows系统安装部署工具。支持所有Windows平台,支持多系统安装、完全格式化C盘、支持创建VHD虚拟硬盘、在Windows及PE系统下运行,允许在安装前对系统进行预优化设置、集成驱动程序、启用第三方主题支持、加入无…

解决 Cannot GET /favicon.ico

一、报错 二、定位(项目所在文件夹) 三、改名(添加图片,重命名)

Java编程规范-DO / BO / DTO / VO / AO的使用

Java 开发 DO / BO / DTO / VO / AO 的作用 Java 开发中,DO(Data Object)、BO(Business Object)、DTO(Data Transfer Object)、VO(View Object) 和 AO(Application Object) 是常用的对象类型,每种类型都在特定的层次和场景中发挥不同的作用。以下是它们的定义和使用…

硬件开发笔记(三十二):TPS54331电源设计(五):原理图BOM表导出、元器件封装核对

前言一个12V转5V、3.3V和4V的电源电路设计好了,下一步导出BOM表,二次核对元器件型号封装,这是可以生产前的最后一步了。 导出BOM表步骤一:打开原理图打开项目,双击点开原理图:   步骤二:报告-元器件列表列宽一点,板子元器件种类规格不多的时候,导出的东西也不多,因…

数字孪生-智能制造

1、数字企业内循环:打造端到端的数字化应用体验 2、GARTNER分层架构 3、企业数字化架构 4、数字企业的两大核心特征 6、产品数字主线赋能企业转型 7、数字主线关键技术:基于统一架构构建产品全量数字模型 8、闭环数字化解决方案 9、基于数字主线的设计-仿真-试验协同 10、产品数…

C# WPF PrintDialog 打印(3)

前面https://www.cnblogs.com/yinyu5/p/18634080使用PrintDocument方法打印了Canvas,这里打印下面的DataGrid列表内容:这里DataGrid的数据源是DataTable,后台代码:1 private void PrintDocument_DataTable_Method(string Title, DataTable dataTable)2 {3 …

【JAVA代码审计】记一次某java类的cms最最最详细的代码审计

前言 刚好遇到一个授权的渗透是通过该cms实现getshell,所以顺便审计一下java类的cms,这个管理系统是一个内容管理系统,下载地址 https://gitee.com/oufu/ofcms/tree/V1.1.3/tomcat下载地址 https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.78/bin/apache-tomcat-8.5.78-wind…

12.26日每日总结

昨天在调试51单片机的串口时,发现芯片手册上有一句话,在使用定时器1产生串口的波特率时,定时器1就不能使能了。不是不能用,是直接不让使能了,使能后会出错,导致发送的数据不稳定。 今天继续研究了触摸滑条,发现滑条输出的值为从小到大,如下图所示的样子,这就导致从最上…

Minio使用教程

Minio MinIO 是一个高性能的对象存储服务器,用于构建云存储解决方案。它使用Golang编写,专为私有云、公有云和混合云环境设计。它是兼容Amazon S3 API的,并可以作为一个独立的存储后端或与其他流行的开源解决方案(如Kubernetes)集成。 MinIO 允许你存储非结构化数据(如图…