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,查询其 ...
随机推荐
- poi读取写入word【未完,待续】
, [项目实战]Java POI之Word导出经典案例一 Java POI 读取word文件 POI-对于WORD的操作(一)
- python 精华梳理(已理解并手写)--全是干货--已结
基础部分 map,reduce,filter,sort,推导式,匿名函数lambda , 协程,异步io,上下文管理 自定义字符串转数字方法一不使用reduce import re def str2i ...
- js中检测数据类型的几种方式
1.typeof 一元运算符,用来检测数据类型.只可以检测number,string,boolean,object,function,undefined. 对于基本数据类型是没有问题的,但是遇到引用数 ...
- partial.js client-side routing(客户端路由-基于HTML5 SPA特性的历史API)
partial.js client-side routing https://github.com/petersirka/partial.js-clientside Framework support ...
- bzoj 3916 暴力哈希
暴力的哈希,注意: 将一个串当作另一个串的前缀,需要乘上p[len],len=后面串的长度 这是自己的代码,拿数据在本地测A掉了,但是bz上wa了??bz换数据了难道?? #include<cs ...
- 【杂】指针,*,&
一个小程序解释指针变量的作用: #include<iostream> #include"cww.h" void cloud(int *); using namespac ...
- Maven的日常
强烈建议把 Maven 的 settings.xml 文件同时放在:%USER_HOME%/.m2/settings.xml 和${maven.home}/conf/settings.xml 两个地方 ...
- mybatis-servlet.xml配置SpringMVC样板
<?xml version="1.0" encoding="UTF-8" ?><beans xmlns:xsi="http://ww ...
- 一款好用的wangEditor编辑器
文档:https://www.kancloud.cn/wangfupeng/wangeditor3/332599
- luogu P3235 [HNOI2014]江南乐
传送门 这题又是我什么时候做的(挠头) 首先是个和SG函数有关的博弈论,SG=0则先手必败.显然一堆石子就是一个游戏,而若干堆石子的SG值就是每堆SG的异或和,所以算出每堆石子SG就能知道答案 然后怎 ...