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国将永远从这个星球消失, ...
随机推荐
- bzoj千题计划238:bzoj3668: [Noi2014]起床困难综合症
http://www.lydsy.com/JudgeOnline/problem.php?id=3668 这..一位一位的来就好了呀 #include<cstdio> #include&l ...
- [iOS]Xcode处理过时方法的警告
####强迫症的福利, 有的时候, 我们特别讨厌Xcode中的代码警告, 以下就是遇到各种警告的时候的处理方法:(后续会一直更新) 产生警告的原因: 某些方法废弃了, 会产生警告! 样式: 处理方法: ...
- H5 Day2 练习
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【原创】javascript模板引擎的简单实现
本来想把之前对artTemplate源码解析的注释放上来分享下,不过隔了一年,找不到了,只好把当时分析模板引擎原理后,自己尝试 写下的模板引擎与大家分享下,留个纪念,记得当时还对比了好几个模板引擎来着 ...
- 公告:关注canvas的同学注意了
因为我之前把基础大致都帮各位详细讲过了! 什么fill,line,乱七八糟的一堆.都有demo了 所以我最近写起来可能会快很多了!如果有不明白的只能请各位回顾下之前的文章了 毕竟如果按照这个进度写文章 ...
- [转] 解决RegexKitLite编译报错
本文永久地址为http://www.cnblogs.com/ChenYilong/p/3984254.html ,转载请注明出处. 在编译RegexKitLite的时候,报错如下: Undefined ...
- [R语言]关联规则2---考虑items之间严格的时序关系
前面介绍了关联规则1---不考虑用户购买的items之间的时序关系,但在一些情况下用户购买item是有严格的次序关系了,比如在某些休闲游戏中,用户购买了道具A才能购买道具B,且道具A和B只能购买一次, ...
- 小程序登录、微信网页授权(Java版)
首先呢,“登录”.“授权”.“授权登录”,是一样的意思,不用纠结. 写小程序授权登录的代码前,需要了解清楚openid与unionid的区别,这里再简单介绍一下: 腾讯有个 “微信·开放平台”,只有企 ...
- 【ORACLE】oracl基本操作笔记
1.用命令导入导出表 C:\Users\xiang>imp bjlims/bjlims@orcl file="c:\tjlims.dmp" full=y C:\Users\x ...
- 线段树->面积并 Atlantis HDU - 1542
题目链接:https://cn.vjudge.net/problem/HDU-1542 题目大意:求面积并 具体思路:我们首先把矩形分割成一横条一横条的,然后对于每一个我们给定的矩形,我们将储存两个点 ...