P1552 [APIO2012]派遣

链接

https://www.luogu.org/problemnew/show/P1552

思路

忍者数量肯定越多越好
那就从下到上的合并它的孩子
左偏树的话
顺便维护一个tot,大头堆,如果tot大于了m,把大的删掉
如果左偏树忘干净了或者没学的话
线段树合并也是个不错的选择
直接权值线段树合并就好,内存30倍会炸,也许是我没离散化的缘故吧
查询在线段树上面二分

左偏树代码

#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define ll long long
using namespace std;
const int maxn=100047;
inline int read() {int x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
struct edge {int v,nxt;
}e[maxn];
int head[maxn],tot;
void add_edge(int u,int v) {e[++tot].v=v;e[tot].nxt=head[u];head[u]=tot;
}
int n,m,mone;
ll sum[maxn],ans;
int size[maxn];
int ch[maxn][2],dis[maxn],val[maxn],xs[maxn];
int work(int a,int b) {if(!a||!b) return a+b;if(val[a]<val[b]) swap(a,b);ch[a][1]=work(ch[a][1],b);if(dis[ch[a][0]]<dis[ch[a][1]]) swap(ch[a][0],ch[a][1]);dis[a]=dis[ch[a][1]]+1;return a;
}
int merge(int x,int y) {int tmp=work(x,y);y=x^y^tmp,x=tmp;sum[x]+=sum[y];size[x]+=size[y];return tmp;
}
int delet(int x) {int tmp=work(ch[x][0],ch[x][1]);size[tmp]=size[x]-1;sum[tmp]=sum[x]-val[x];return tmp;
}
int dfs(int u) {int rt=u;for(int i=head[u];i;i=e[i].nxt) {int v=e[i].v;int tmp=dfs(v);rt=merge(rt,tmp);}while(sum[rt]>mone) rt=delet(rt);ans=max(ans,xs[u]*(ll)size[rt]);return rt;
}
int main() {n=read(),mone=read();int root;FOR(i,1,n) {int x=read();val[i]=read();xs[i]=read();sum[i]=val[i];size[i]=1;if(x) add_edge(x,i);else root=i;}int wuyong=dfs(root);cout<<ans<<"\n";return 0;
}

线段树合并代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <utility>
#define ll long long
using namespace std;
const int N=1e5+7;
int read() {int x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
int n,m,money[N],leader[N],rt[N];
vector<int> G[N];
struct node {int l,r,siz;ll tot;
}e[N*30];
void pushup(int rt) {e[rt].siz=e[e[rt].l].siz+e[e[rt].r].siz;e[rt].tot=e[e[rt].l].tot+e[e[rt].r].tot;
}
int cnt;
void insert(int l,int r,int L,int &rt) {rt=++cnt;if(l==r) {e[rt].siz++;e[rt].tot+=l;return;}int mid=(l+r)>>1;if(L<=mid) insert(l,mid,L,e[rt].l);else insert(mid+1,r,L,e[rt].r);pushup(rt);
}
int merge(int l,int r,int x,int y) {if(!x||!y) return x+y;if(l==r) {e[x].siz+=e[y].siz;e[x].tot+=e[y].tot;return x;}int mid=(l+r)>>1;e[x].l=merge(l,mid,e[x].l,e[y].l);e[x].r=merge(mid+1,r,e[x].r,e[y].r);pushup(x);return x;
}
int query(int l,int r,int k,int rt) {if(l==r) return k>=e[rt].tot ? e[rt].siz : 0;int mid=(l+r)>>1;if(e[e[rt].l].tot>=k) return query(l,mid,k,e[rt].l);else return e[e[rt].l].siz+query(mid+1,r,k-e[e[rt].l].tot,e[rt].r);
}
ll ans;
void dfs(int u) {insert(1,1000000000,money[u],rt[u]);for(vector<int>::iterator it=G[u].begin();it!=G[u].end();++it) {dfs(*it);rt[u]=merge(1,1000000000,rt[u],rt[*it]);}ans=max(ans,(ll)leader[u]*query(1,1000000000,m,rt[u]));
}
int main() {n=read(),m=read();for(int i=1;i<=n;++i) {int x=read();money[i]=read();leader[i]=read();G[x].push_back(i);}dfs(1);printf("%lld",ans);return 0;
}

转载于:https://www.cnblogs.com/dsrdsr/p/10359546.html

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

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

相关文章

Wss 3.0安装指南(一)

Wss 3.0安装指南(一) "基本" 模式 WSS3.0的安装可分为独立服务器安装和服务器场安装,前者是将所有的服务和应用安装在一台Server 上,后者则是…

java web 程序---javabean实例--登陆界面并显示用户名和密码

重点&#xff1a;注意大小写&#xff0c;不注意细节&#xff0c;这点小事&#xff0c;还需要请教 发现一个问题&#xff0c;也是老师当时写的时候&#xff0c;发现代码没错&#xff0c;但是就是运行问题。 大家看&#xff0c;那个java类&#xff0c;我们要求是所有属性均为私有…

智能五子棋基本思路

前些天闲时写的,在学数据结构的时拿来练手的.没技术含量,最有技术含量的AI部分,我是看别人(园子里叫二十四生的)的算法改的.刚弄了一下午小程序弄不过去,头疼,现无聊的紧,闲着发着玩.当消遣主要发下AI核心算法.有兴趣的同学用VB,VC.VC#都可以一起做着玩.保持对编程的兴趣.其它没…

webpack 4.0 配置文件 webpack.config.js文件的放置位置

一般webpack.config.js是默认放在根目录的&#xff0c;不在根目录的时候需要在package.json中制定位置&#xff0c;我的配置文件目录是config/webpack.config.js,在package.json文件中的配置为&#xff1a; "scripts": { "build": "webpack --mode p…

Python-memcached的基本使用 - Flynewton成长点滴 - 开源中国社区

Python-memcached的基本使用 - Flynewton成长点滴 - 开源中国社区Python-memcached的基本使用 发表于3年前(2010-12-04 00:02) 阅读&#xff08;9601&#xff09; | 评论&#xff08;3&#xff09; 12人收藏此文章, 我要收藏 赞1 python memcached 想学Python&#xff0c;又想…

快速构建ceph可视化监控系统

https://my.oschina.net/colben/blog/1844602 https://my.oschina.net/u/3626804/blog/1859613转载于:https://www.cnblogs.com/diyunpeng/p/10363183.html

阳奉阴违(转载)

这个词不是好词&#xff0c;大家都这么看&#xff0c;但现在生活里却经常要照它做&#xff0c;表面上应付一下&#xff0c;表示一下&#xff0c;然后再怎么做就随便&#xff1b;如果你不表示这一下&#xff0c;那就怎么也不行。 MSN和Yahoo就已经理解了这个问题&#xff0c;并且…

PowerShell远程管理Windows Server(2):公网访问【web形式】

*此文章只适合于windows server 2012版本以上&#xff1b;Powershell Web Access需要两个步骤才能使用&#xff1a;一、安装powershell web access功能&#xff1b;二、配置powershell web access&#xff1b;只要在服务器上启用powershell web access功能&#xff0c;即可通过…

POJ 3090 Visible Lattice Points 【欧拉函数】

<题目链接> 题目大意&#xff1a; 给出范围为(0, 0)到(n, n)的整点&#xff0c;你站在(0,0)处&#xff0c;问能够看见几个点。 解题分析&#xff1a;很明显&#xff0c;因为 N (1 ≤ N ≤ 1000) &#xff0c;所以无论 N 为多大&#xff0c;(0,1),(1,1),(1,0)这三个点一定…

2005的行列转换

2005的行列转换: create table ta(编号 int,人员 varchar(5), 年份 int,月份 int ,[1号] varchar(5), [2号] varchar(5),[3号] varchar(5),[4号] varchar(5))insert ta select 1, 张三,2006, 1, 正常, 迟到, 迟到, 事假union all select 2, 张三, 2006, 2, 迟到, 事假, 正常, 正…

精选 5 个漂亮的 CSS3 图片滑过特效

这篇文章将为大家分享5款漂亮的CSS3图片滑过特效&#xff0c;比如滑过后显示图片的详细文字介绍&#xff0c;又比如滑过后对图片进行淡入淡出的效果等等。让我们一起来看看&#xff0c;喜欢的朋友赶紧收藏。 1、非常酷的CSS3图片说明效果 在线演示 / 源码下载 2、纯CSS3图片相…

Koa2 静态服务及代理配置

const path require(path) const Koa require(koa) const static require(koa-static) const httpProxyMiddleware require(http-proxy-middleware) const koaConnect require(koa2-connect)const app new Koa()// 引入静态文件 app.use(static(path.join(__dirname, dis…

问题:上司说「看你每天准时下班就知道你工作量不饱和」,如何回应

问题&#xff1a;上司说「看你每天准时下班就知道你工作量不饱和」&#xff0c;如何回应正常下班时间6点&#xff0c;只要是6点半前下班的&#xff0c;上司都认为没有加班。Eno-Bea回答&#xff0c;注重感受&#xff0c;不一定是别人的虽然我不知道你具体从事什么工作与职业&am…

请不要做浮躁的人

1.不要看到别人的回复第一句话就说&#xff1a;给个代码吧&#xff01;你应该想想为什么。当你自己想出来再参考别人的提示&#xff0c;你就知道自己和别人思路的差异。2.初学者请不要看太多太多的书那会误人子弟的&#xff0c;先找本系统的学&#xff0c;很多人用了很久都是只…

framework 2.0 新增的一个string.split()方法重载

在1.1版本的时候&#xff0c;出现的split方法只能够使用分隔符分开一个字符串得到一个数组&#xff0c;如果2个分隔符连续的话&#xff0c;那么这个方法会把他解析成一个空字符串在数组中&#xff0c;但是现在的framework2.提供一个重载&#xff0c;支持不把连续的分隔符解析成…

1_Why DL work ?

1 . Why Deep? 李宏毅的解释&#xff1a;Modularization 【模块化的益处】https://zhuanlan.zhihu.com/p/22888385 【另一个知乎大佬】转载于:https://www.cnblogs.com/LS1314/p/10380789.html

Java 全半角转换

* 全角转半角的 转换函数* return String*/public static final String full2HalfChange(String QJstr){StringBuffer outStrBuf new StringBuffer("");String Tstr "";byte[] b null;for (int i 0; i < QJstr.length(); i) {Tstr QJstr.substring…

异或特性

异或的两个特性 两个相等的数的异或为0&#xff1b;任何一个数和0异或之后&#xff0c;还是这个数不变应用 在 1 到 n 的数字中&#xff0c;有且只有唯一的一个数字 m 重复出现偶数次&#xff0c;其他数字都只出现一次&#xff0c;请用异或把这个数字找出来。 原始数据: 1,2...…

Cocos2d-x 3.0新引擎文件夹结构

Cocos2d-x 3.0新引擎文件夹结构2014年4月29日 Cocos2d-x 3.0学习作为一个Cocos2d-x的菜鸟&#xff0c;我倒是挺愿意关注不同版本号之间的差别&#xff0c;Cocos2d-x 3.0自2013年7月份開始公布alpha0-pre版本号&#xff0c;到2014年4月23日公布正式版&#xff0c;历经9个版本号…

SOA系列文章(二):服务设计原理:服务模式和反模式

服务设计系列的法则已经发展到最佳通信实践和取样相关编码的程度。本文提供了设计和实现网络服务的基本原理&#xff0c;并且对面向服务的体系结构(SOA)的相关概念做了一个简要的回顾&#xff0c;以及有关于几种模式和反模式的详细讨论&#xff0c;当构建网络服务时&#xff0c…