BZOJ - 2809 dispatching 主席树+dfs序
#include <bits/stdc++.h>
#define nd seg[now]
#define ndp seg[pre]
#define mid ((s+t)>>1)
#define ll long long
using namespace std;
const int maxn=1e5+10;
const int maxm=1e6+10;
const int INF=0x3f3f3f3f;
int casn,n,k;
ll m;
struct node2{
int to,next;
}e[maxn];
int head[maxn],nume;
int tin[maxn],tout[maxn];
ll cost[maxn],pos[maxn],power[maxn];
int rt[maxn],size,cnt,pre[maxn],dfn[maxn];
int cmp(int a,int b){
return cost[a]<cost[b];
}
inline void add(int a,int b){
e[++nume]=(node2){b,head[a]};
head[a]=nume;
}
void dfs(int now){
tin[now]=++cnt;
dfn[cnt]=now;
for(int i=head[now];i;i=e[i].next){
dfs(e[i].to);
}
tout[now]=cnt;
}
struct node{
int l,r;ll sum,cnt;
}seg[maxn*20];
void maketree(int s=1,int t=n,int &now=rt[0]){
now=++size;nd=(node){s,t,0,0};
if(s==t) return ;
maketree(s,mid,nd.l);maketree(mid+1,t,nd.r);
}
void update(int &now,int pre,int k,ll cost,int s=1,int t=n){
now=++size;nd=ndp,nd.sum+=cost,nd.cnt++;
if(s==t) return ;
if(k<=mid)update(nd.l,ndp.l,k,cost,s,mid);
else update(nd.r,ndp.r,k,cost,mid+1,t);
}
ll query(int ndl,int ndr,ll k,int s=1,int t=n){
if(seg[ndr].sum-seg[ndl].sum<=k) return seg[ndr].cnt-seg[ndl].cnt;
if(s==t) return min(seg[ndr].cnt-seg[ndl].cnt,k/pos[s]);
ll sum=seg[seg[ndr].l].sum-seg[seg[ndl].l].sum;
if(k>=sum) return query(seg[ndl].r,seg[ndr].r,k-sum,mid+1,t)+seg[seg[ndr].l].cnt-seg[seg[ndl].l].cnt;
else return query(seg[ndl].l,seg[ndr].l,k,s,mid);
}
#undef mid
int main(){
scanf("%d%lld",&k,&m);
int master;
for(int i=1;i<=k;i++){
scanf("%d%lld%lld",pre+i,cost+i,power+i);
if(pre[i]==0)master=i;
else add(pre[i],i);
pos[i]=cost[i];
}
sort(pos+1,pos+1+k);
n=unique(pos+1,pos+1+k)-(pos+1);
dfs(master);
maketree();
for(int i=1;i<=k;i++){
int id=lower_bound(pos+1,pos+1+n,cost[dfn[i]])-pos;
update(rt[i],rt[i-1],id,cost[dfn[i]]);
}
ll ans=0;
for(int i=1;i<=k;i++){
ans=max(ans,power[i]*query(rt[tin[i]-1],rt[tout[i]],m));
}
printf("%lld\n",ans);
return 0;
}

BZOJ - 2809 dispatching 主席树+dfs序的更多相关文章
- BZOJ 2809: [Apio2012]dispatching [主席树 DFS序]
传送门 题意:查询树上根节点值*子树中权值和$\le m$的最大数量 最大值是多少 求$DFS$序,然后变成区间中和$\le m$最多有几个元素,建主席树,然后权值线段树上二分就行了 $WA$:又把边 ...
- 51 nod 1681 公共祖先 (主席树+dfs序)
1681 公共祖先 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 有一个庞大的家族,共n人.已知这n个人的祖辈关系正好形成树形结构(即父亲向儿子连边). 在另 ...
- 【BZOJ1803】Spoj1487 Query on a tree III 主席树+DFS序
[BZOJ1803]Spoj1487 Query on a tree III Description You are given a node-labeled rooted tree with n n ...
- bzoj 3772 精神污染 主席树+dfs序
精神污染 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 637 Solved: 177[Submit][Status][Discuss] Descri ...
- 【SPOJ】10628. Count on a tree(lca+主席树+dfs序)
http://www.spoj.com/problems/COT/ (速度很快,排到了rank6) 这题让我明白了人生T_T 我知道我为什么那么sb了. 调试一早上都在想人生. 唉. 太弱. 太弱. ...
- BZOJ3772 精神污染 主席树 dfs序
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3772 题意概括 给出一个树,共n个节点. 有m条互不相同的树上路径. 现在让你随机选择2条路径,问 ...
- BZOJ5338[TJOI2018]xor——主席树+dfs序
题目描述 现在有一颗以1为根节点的由n个节点组成的树,树上每个节点上都有一个权值vi. 现在有Q 次操作,操作如下: 1 x y 查询节点x的子树中与y异或结果的最大值 2 x y z ...
- BZOJ3545&3551[ONTAK2010]Peaks——kruskal重构树+主席树+dfs序+树上倍增
题目描述 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只 ...
- Codeforces 893F(主席树+dfs序)
在子树内和距离不超过k是一个二维限制,容易想到主席树,但主席树显然没法查最小值,因为不满足区间可减.kdtree和二维线段树可以干这事,但肯定会T飞.但事实上我们的问题有一个特殊性:对某个点x,查询其 ...
随机推荐
- HDU 1052(田忌赛马 贪心)
题意是田忌赛马的背景,双方各有n匹马,下面两行分别是田忌和齐王每匹马的速度,要求输出田忌最大的净胜场数*每场的赌金200. 开始的时候想对双方的马匹速度排序,然后比较最快的马,能胜则胜,否则用最慢的马 ...
- Spyder Crashed During Last Session
尝试一:Command: pyhton spyder --reset 尝试二:Command: spyder --show-console (突然就好了...)
- JAVA 线程池之Callable返回结果
本文介绍如何向线程池提交任务,并获得任务的执行结果.然后模拟 线程池中的线程在执行任务的过程中抛出异常时,该如何处理. 一,执行具体任务的线程类 要想 获得 线程的执行结果,需实现Callable接口 ...
- jquery 控制 video 视频播放和暂停
$('video').trigger('play'); $('video').trigger('pause'); 参考:https://blog.csdn.net/arvin0/article/det ...
- 三十六、Linux 线程——线程基本概念及线程的创建和终止
36.1 线程介绍 36.1.1 线程的基本概念 进程是资源管理的最小单位,线程是程序执行的最小单位 每个进程都有自己的数据段.代码段和堆栈段. 线程通常叫做轻型的进程,它包含独立的栈和 CPU 寄存 ...
- mssql 创建函数简单实例
CREATE FUNCTION [dbo].[f_DailyIncome] ( @userId int, @date date ) ,) AS BEGIN ,); ) from Channel_Use ...
- QWidget扩充父子关系
childAt(x, y) 获取在指定坐标处的子控件 parentWidget() 获取指定控件的父控件 s=label.parentWidget() #返回label的父 ...
- 一款好用的wangEditor编辑器
文档:https://www.kancloud.cn/wangfupeng/wangeditor3/332599
- 迅为-IMX6开发板十层PCB制造,24小时开机测试,满负荷测试运行俩天,没有死机
迅为-IMX6开发板——工业主板的优势 1.元器件 IMX6工业主板选料,选用经过长时间.高要求验证元器件,保证产品在复杂条件下,耐高温.抗潮湿等工业场合的需求. 2.PCB设计 IMX6工业主板采用 ...
- ARM核心板_迅为4418核心板_高稳定超轻薄_研发超灵感
ARM核心板_迅为4418核心板_三星四核S5P4418处理器 4418核心板正面: 4418核心板反面:4418核心板尺寸图:详情了解:https://item.taobao.com/item.ht ...