bzoj 2809 可并堆维护子树信息
对于每个节点,要在其子树中选尽量多的节点,并且节点的权值和小于一个定值.
建立大根堆,每个节点从儿子节点合并,并弹出最大值直到和满足要求.
/**************************************************************
Problem: 2809
User: idy002
Language: C++
Result: Accepted
Time:1224 ms
Memory:6664 kb
****************************************************************/ #include <cstdio>
#include <algorithm>
#define max(a,b) ((a)>(b)?(a):(b))
#define N 100010
using namespace std; typedef long long dnt; #define szof(nd) ((nd)?(nd)->sz:0)
struct Node {
int v, sz;
dnt s;
Node *ls, *rs;
inline void update() {
s = v + (ls?ls->s:) + (rs?rs->s:);
sz = + szof(ls) + szof(rs);
if( szof(ls)<szof(rs) ) swap(ls,rs);
}
}pool[N], *tail=pool, *root[N]; int n, m;
int head[N], dest[N], next[N], etot;
dnt lead[N], cost[N];
int qu[N], bg, ed, master; void adde( int u, int v ) {
etot++;
dest[etot] = v;
next[etot] = head[u];
head[u] = etot;
}
Node *newnode( int v ) {
Node *nd = ++tail;
nd->s = nd->v = v;
nd->ls = nd->rs = ;
nd->sz = ;
return nd;
}
Node *smerge( Node *na, Node *nb ) {
if( !na && !nb ) return ;
if( !na ) return nb;
if( !nb ) return na;
if( na->v > nb->v ) {
na->rs = smerge( na->rs, nb );
na->update();
return na;
} else {
nb->rs = smerge( nb->rs, na );
nb->update();
return nb;
}
}
int main() {
scanf( "%d%d", &n, &m );
for( int i=,p; i<=n; i++ ) {
scanf( "%d%lld%lld", &p, cost+i, lead+i );
if( p ) adde( p, i );
else master = i;
}
qu[bg=ed=] = master;
while( bg<=ed ) {
int u=qu[bg++];
for( int t=head[u]; t; t=next[t] ) {
int v=dest[t];
qu[++ed] = v;
}
}
dnt ans = ;
for( int i=ed; i>=; i-- ) {
int u=qu[i];
root[u] = newnode(cost[u]);
for( int t=head[u]; t; t=next[t] ) {
int v=dest[t];
root[u] = smerge( root[u], root[v] );
}
while( root[u]->s > m )
root[u] = smerge( root[u]->ls, root[u]->rs );
ans = max( ans, lead[u]*root[u]->sz );
}
printf( "%lld\n", ans );
}
bzoj 2809 可并堆维护子树信息的更多相关文章
- BZOJ 3306: 树 LCT + set 维护子树信息
可以作为 LCT 维护子树信息的模板,写的还是比较优美的. 本地可过,bzoj 时限太紧,一直 TLE #include<bits/stdc++.h> #define setIO(s) f ...
- bzoj 3779 重组病毒——LCT维护子树信息
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3779 调了很久……已经懒得写题解了.https://www.cnblogs.com/Zinn ...
- bzoj 4530 大融合 —— LCT维护子树信息
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4530 用LCT维护子树 size,就是实边和虚边分开维护: 看博客:https://blog ...
- BZOJ 3510: 首都 LCT + multiset维护子树信息 + 树的重心
Code: #include<bits/stdc++.h> #define maxn 200000 #define inf 1000000000 using namespace std; ...
- BZOJ 3639: Query on a tree VII LCT_set维护子树信息
用 set 维护子树信息,细节较多. Code: #include <cstring> #include <cstdio> #include <algorithm> ...
- 【bzoj4530】[Bjoi2014]大融合 LCT维护子树信息
题目描述 小强要在N个孤立的星球上建立起一套通信系统.这套通信系统就是连接N个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是它所在的当前能够联通的树上路过它的简单路径的数量 ...
- BZOJ4530[Bjoi2014]大融合——LCT维护子树信息
题目描述 小强要在N个孤立的星球上建立起一套通信系统.这套通信系统就是连接N个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是它所在的当前能够 联通的树上路过它的简单路径的数 ...
- 【uoj#207】共价大爷游长沙 随机化+LCT维护子树信息
题目描述 给出一棵树和一个点对集合S,多次改变这棵树的形态.在集合中加入或删除点对,或询问集合内的每组点对之间的路径是否都经过某条给定边. 输入 输入的第一行包含一个整数 id,表示测试数据编号,如第 ...
- 【bzoj3510】首都 LCT维护子树信息(+启发式合并)
题目描述 在X星球上有N个国家,每个国家占据着X星球的一座城市.由于国家之间是敌对关系,所以不同国家的两个城市是不会有公路相连的. X星球上战乱频发,如果A国打败了B国,那么B国将永远从这个星球消失, ...
随机推荐
- [软件]在浏览器里添加MarkDown Here(插件)
1. 先来说说这个插件的作用是什么: 用于在网页一些编辑文本的地方, 使用MacDown编辑文本 支持大部分浏览器, https://github.com/adam-p/markdown-here ...
- CSS3 定位| Position研究
视区(视口) 当浏览者查看一份网页文件时,通常使用者代理(User Agents, UA, 浏览器)会提供给浏览者一个视区(视窗或者是画面里的其它可视区域).当我们调整视区大小时,UA 就有可能会改变 ...
- AngularJs -- ngMessages(1.3+)
ngMessages(1.3+) 表单和验证是AngularJS中复杂的组件之一.用AngularJS默认的方式来写,不是特别好,不简洁. 在AngualrJS1.3发布前,表单验证必须以这种方式编写 ...
- [USACO08DEC]Trick or Treat on the Farm 记忆化搜索
这一题非常水,因为每个点的下一个目的地是唯一的,可以考虑对每一个还为访问过的点dfs直接找出所有的环,同时更新每一个点能去的点的数量(即答案). 我们dfs时找到环上已经遍历过的一个点,用当前的dfn ...
- Python2的object和type
前言: Python在2.2和3.0之间,把继承了object的类叫做新式类,如果我们定义了一个类,他没有继承object,则不是新式类,则没有__class__,__bases__等属性,而用typ ...
- MySQL的Auto-Failover功能
今天来体验一下MySQL的Auto-Failover功能,这里用到一个工具MySQL Utilities,它的功能很强大.此工具提供如下功能:(1)管理工具 (克隆.复制.比较.差异.导出.导入)(2 ...
- ispoweroftwo 判断2的次幂【转】
转自:https://www.cnblogs.com/troublelost/p/5236391.html 首先结果是: public bool IsPowerOfTwo(int n) { if(n& ...
- linux驱动---等待队列、工作队列、Tasklets【转】
转自:https://blog.csdn.net/ezimu/article/details/54851148 概述: 等待队列.工作队列.Tasklet都是linux驱动很重要的API,下面主要从用 ...
- GaN助力运营商和基站OEM实现5G sub-6GHz和mmWave大规模MIMO
到2021年,估计全球会有更多的人拥有移动电话(55亿),将超过用上自来水的人数(53亿).与此同时,带宽紧张的视频应用将进一步增加对移动网络的需求,其会占移动流量的78%.使用大规模多输入多输出(M ...
- 新手学习爬虫之创建第一个完整的scrapy工程-糗事百科
创建第一个scrapy工程-糗事百科 最近不少小伙伴儿,问我关于scrapy如何设置headers的问题,时间久了不怎么用,还真有的忘,全靠记忆去写了,为了方便大家参考,也方便我以后的查阅,这篇文章就 ...