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,查询其 ...
随机推荐
- float clearfix
Float float 属性的原本作用是: 为了实现文字环绕效果 float 父元素高度塌陷实现文字环绕效果 float 固定一列宽的自适应布局 float 多列布局` float 固定一列宽的自适应 ...
- SpringMVC的概念和图解
1.概念 Spring MVC起步:慕课网视频 SpringMVC架构浅析:参考 Spring详解(一)------概述 Spring架构简单描述 2.图片
- JavaScript中的this指向规则
首先,JavaScript的this指向问题并非传说中的那么难,不难的是机制并不复杂,而被认为不好理解的是逻辑关系和容易混淆的执行上下文.这篇博客也就会基于这两个不好理解的角度来展开,如要要严格的来对 ...
- FeignClient调用POST请求时查询参数被丢失的情况分析与处理
前言 本文没有详细介绍 FeignClient 的知识点,网上有很多优秀的文章介绍了 FeignCient 的知识点,在这里本人就不重复了,只是专注在这个问题点上. 查询参数丢失场景 业务描述: 业务 ...
- Web 学习笔记(一)百度统计
一.百度统计是什么? 百度统计是百度推出的一款免费的专业网站流量分析工具,能够告诉用户访客是如何找到并浏览用户的网站,在网站上做了些什么,有了这些信息,可以帮助用户改善访客在用户的网站上的使用体验,不 ...
- Ant和Maven
Ant和Maven都是基于Java的构建(build)工具.理论上来说,有些类似于(Unix)C中的make ,但没有make的缺陷.Ant是软件构建工具,Maven的定位是软件项目管理和理解工具. ...
- Structured Streaming + Kafka Integration Guide 结构化流+Kafka集成指南 (Kafka broker version 0.10.0 or higher)
用于Kafka 0.10的结构化流集成从Kafka读取数据并将数据写入到Kafka. 1. Linking 对于使用SBT/Maven项目定义的Scala/Java应用程序,用以下工件artifact ...
- vue input添加回车触发
普通vue input @keyup.enter="onSubmit" element el-input @keyup.enter.native="onSubmit&qu ...
- C#窗口闪烁问题解决
https://www.cnblogs.com/AndyDai/p/5203798.html 开发WinForm 程序时经常会遇到闪屏的问题,这会给用户造成很差的使用体验,所以必须妥善解决好这个问题. ...
- 【四】Java虚拟机内存区域初识
一.线程独占区 1.程序计数器 程序计数器是一块处于线程独占区较小的内存空间,它可以看是当前线程所执行的字节码的行号指示器. 如果线程执行的是Java方法,这个计数器记录的是正在执行的虚拟机字节码 ...