题目分析:

yy一下就知道了,合并用可并堆少个log。

代码:

 #include<bits/stdc++.h>
using namespace std; const int maxn = ; int n,m;
int b[maxn],c[maxn],l[maxn],sz[maxn];
long long tot[maxn];
int dis[maxn],val[maxn],ch[maxn][],pts[maxn];
vector <int> g[maxn];
long long ans = ; int merge(int r1,int r2){
if(r1 == ) return r2; if(r2 == ) return r1;
if(val[r1] > val[r2]){
ch[r1][] = merge(ch[r1][],r2);
if(dis[ch[r1][]] < dis[ch[r1][]]) swap(ch[r1][],ch[r1][]);
if(ch[r1][]) dis[r1] = dis[ch[r1][]] + ;
else dis[r1] = ;
return r1;
}else{
ch[r2][] = merge(r1,ch[r2][]);
if(dis[ch[r2][]] < dis[ch[r2][]]) swap(ch[r2][],ch[r2][]);
if(ch[r2][]) dis[r2] = dis[ch[r2][]] + ;
else dis[r2] = ;
return r2;
}
} void read(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d%d%d",&b[i],&c[i],&l[i]);
for(int i=;i<=n;i++){g[b[i]].push_back(i);}
} void dfs(int now){
for(int i=;i<g[now].size();i++){
dfs(g[now][i]);
sz[now] += sz[g[now][i]];
tot[now] += tot[g[now][i]];
}
sz[now]++; tot[now] += c[now];
for(int i=;i<g[now].size();i++)pts[now]=merge(pts[now],pts[g[now][i]]);
while(tot[now] > m){
tot[now] -= val[pts[now]];sz[now]--;
pts[now] = merge(ch[pts[now]][],ch[pts[now]][]);
}
ans = max(ans,1ll*l[now]*sz[now]);
} void work(){
for(int i=;i<=n;i++) pts[i] = i,val[i] = c[i];
dfs(g[][]);
printf("%lld",ans);
} int main(){
read();
work();
return ;
}

BZOJ2809 dispatching 【可并堆】的更多相关文章

  1. 【BZOJ2809】[Apio2012]dispatching 可并堆

    [BZOJ2809][Apio2012]dispatching Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 M ...

  2. bzoj1455: 罗马游戏 + bzoj2809: Dispatching(可并堆)

    昨天看了可并堆是什么,写的是左偏树 大概就是一棵树 1.有左偏性质,即当前根到左叶子节点距离比到右叶子节点距离大 2.有堆性质,堆顶关键字比子树关键字小 合并两个堆的时候,关键字大的插入到关键字小的那 ...

  3. BZOJ2809 [Apio2012]dispatching 可并堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2809 题意概括 n个点组成一棵树,每个点都有一个领导力和费用,可以让一个点当领导,然后在这个点的子 ...

  4. bzoj 2809: [Apio2012]dispatching -- 可并堆

    2809: [Apio2012]dispatching Time Limit: 10 Sec  Memory Limit: 128 MB Description 在一个忍者的帮派里,一些忍者们被选中派 ...

  5. [BZOJ2809]dispatching

    Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级. ...

  6. BZOJ 2809 [Apio2012]dispatching(斜堆+树形DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2809 [题目大意] 给出一棵树,求出每个点有个权值,和一个乘算值,请选取一棵子树, 并 ...

  7. BZOJ2809 dispatching(左偏树)

    在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级.为保密,同时增强忍者们的 ...

  8. 2809: [Apio2012]dispatching 可并堆 左偏树

    https://www.lydsy.com/JudgeOnline/problem.php?id=2809 板子题wa了一下因为输出ans没有lld #include<iostream> ...

  9. 【bzoj2809】[Apio2012]dispatching 贪心+可并堆

    题目描述 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级.为保密,同时增 ...

随机推荐

  1. C#代码中插入X86汇编

    这两天在看C# SIMD相关的东西, 在爆栈上面搜到一段代码, 表示很震惊, 还是得贴出来… [UnmanagedFunctionPointer(CallingConvention.StdCall)] ...

  2. python 跨域处理方式

    因为浏览器的同源策略限制,不是同源的脚本不能操作其他源下面的资源,想操作另一个源下面的资源就属于跨域了,这里说的跨域是广义跨域,我们常说的代码中请求跨域,是狭义的跨域,即在脚本代码中向非同源域发送ht ...

  3. Leetcode 中Linked List Cycle 一类问题

    141. Linked List Cycle Given a linked list, determine if it has a cycle in it. Follow up:Can you sol ...

  4. HDU - 1255 扫描线+离散化进阶

    这道题最开始我以为和HDU - 1542 那道题一样,只需要把cover次数改成2次即可,但是后面仔细一想,我们需要求的是覆盖次数大于等于2次的,这样的话,我们需要维护两个长度,HDU-1542 由于 ...

  5. P1525 关押罪犯

    基础并查集-- #include<iostream> #include<string.h> #include<algorithm> #include<stdi ...

  6. JQuery 的Ajax的使用

    JSON:一种轻量级的数据表示方法,优点:传输方便,占用字节少 XML:一种偏重量级的数据表示方法,优点:格式清晰,占用字节多,大量的字节都浪费在了标签上: 网络传输我们常使用json,因为浏览器解析 ...

  7. 帮助小白,最新版JDK的安装与环境变量配置(Win 10系统)

    学习JAVA,必须首先安装一下JDK(java development kit java开发工具包),之后再配置环境变量就可以开始使用JAVA了. 一,安装JDK 1,可以选择到官网下载最新版本的JD ...

  8. VS2015 + OPENCV + CUDA 安装流程

    VS2015  https://blog.csdn.net/guxiaonuan/article/details/73775519?locationNum=2&fps=1 OPENCV htt ...

  9. day 7-4 互斥锁与队列

    一. 基本定义 互斥锁(英语:英语:Mutual exclusion,缩写 Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制.该目的通过将代码切片成一个 ...

  10. Day 4-3 os & sys模块

    常用方法: import os os.getcwd() # 获取当前程序的工作路径(python解释器的运行路径,不是脚本所在的路径.) os.listdir() # 获取当前程序根目录下的所有文件夹 ...