http://codevs.cn/problem/1763/

维护子树大根堆,当子树薪水和>m时,删除最贵的点

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4.  
  5. using namespace std;
  6.  
  7. typedef long long LL;
  8.  
  9. int n,m;
  10.  
  11. #define N 100001
  12.  
  13. int lc[N],rc[N];
  14. int key[N],dis[N];
  15.  
  16. int fa[N],siz[N],lead[N],money[N];
  17. LL sum[N],ans;
  18.  
  19. int tot,nxt[N],to[N],front[N];
  20.  
  21. void read(int &x)
  22. {
  23. x=; char c=getchar();
  24. while(!isdigit(c)) c=getchar();
  25. while(isdigit(c)) { x=x*+c-''; c=getchar(); }
  26. }
  27.  
  28. void add(int u,int v)
  29. {
  30. to[++tot]=v; nxt[tot]=front[u]; front[u]=tot;
  31. }
  32.  
  33. int find(int i) { return fa[i]==i ? i : fa[i]=find(fa[i]); }
  34.  
  35. int merge(int a,int b)
  36. {
  37. if(!a || !b) return a+b;
  38. if(money[a]<money[b]) swap(a,b);
  39. rc[a]=merge(rc[a],b);
  40. siz[a]=+siz[lc[a]]+siz[rc[a]];
  41. sum[a]=money[a]+sum[lc[a]]+sum[rc[a]];
  42. if(dis[rc[a]]>dis[lc[a]]) swap(rc[a],lc[a]);
  43. if(!rc[a]) dis[a]=;
  44. else dis[a]=dis[rc[a]]+;
  45. return a;
  46. }
  47.  
  48. void erase(int x)
  49. {
  50. fa[x]=merge(lc[x],rc[x]);
  51. fa[fa[x]]=fa[x];
  52. }
  53.  
  54. void dfs(int x)
  55. {
  56. for(int i=front[x];i;i=nxt[i])
  57. {
  58. dfs(to[i]);
  59. int u=find(to[i]),v=find(x);
  60. int w=merge(u,v);
  61. fa[u]=fa[v]=w;
  62. fa[w]=w;
  63. while(sum[w]>m) erase(w),w=fa[w];
  64. }
  65. ans=max(ans,(LL)lead[x]*siz[find(x)]);
  66. }
  67.  
  68. int main()
  69. {
  70. read(n); read(m);
  71. int f,rt;
  72. for(int i=;i<=n;++i)
  73. {
  74. read(f);
  75. if(f) add(f,i);
  76. else rt=i;
  77. read(money[i]);
  78. read(lead[i]);
  79. fa[i]=i;
  80. siz[i]=;
  81. sum[i]=money[i];
  82. }
  83. dfs(rt);
  84. cout<<ans;
  85. }

[Apio2012]dispatching 左偏树做法的更多相关文章

  1. 【bzoj2809】[Apio2012]dispatching 左偏树

    2016-05-31  15:56:57 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2809 直观的思想是当领导力确定时,尽量选择薪水少的- ...

  2. bzoj2809 [Apio2012]dispatching(左偏树)

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

  3. bzoj2809 [Apio2012]dispatching——左偏树(可并堆)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2809 思路有点暴力和贪心,就是 dfs 枚举每个点作为管理者: 当然它的子树中派遣出去的忍者 ...

  4. [Apio2012]dispatching 左偏树

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

  5. APIO2012 派遣dispatching | 左偏树

    题目链接:戳我 就是尽可能地选取排名小的,加起来就可以了.然后我们考虑利用一个大根堆,一个一个合并,如果超过派遣的钱,我们就把费用最大的那个忍者丢出队列. 左偏树,作为一个十分优秀的可并堆,我们这道题 ...

  6. [APIO2012]派遣 左偏树

    P1552 [APIO2012]派遣 题面 考虑枚举每个节点作为管理者,计算所获得的满意程度以更新答案.对于每个节点的计算,贪心,维护一个大根堆,每次弹出薪水最大的人.这里注意,一旦一个人被弹出,那么 ...

  7. 洛谷P1552 [APIO2012] 派遣 [左偏树,树形DP]

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

  8. BZOJ2809 dispatching(左偏树)

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

  9. [洛谷P1552] [APIO2012]派遣(左偏树)

    这道题是我做的左偏树的入门题,奈何还是看了zsy大佬的题解才能过,唉,我太弱了. 左偏树总结 Part 1 理解题目 很显然,通过管理关系的不断连边,最后连出来的肯定是一棵树,那么不难得出,当一个忍者 ...

随机推荐

  1. Asp.Net_抓包解析xml文件为json

    protected void Button1_Click(object sender, EventArgs e) { string Phone = this.Txt_Con.Text; string ...

  2. 【转载】python %s %d %f

    %s 字符串 string="hello" #%s打印时结果是hello print "string=%s" % string      # output: s ...

  3. GitHubDesktop权限问题解决办法

    Desktop对于管理仓库非常方便.实用 很多人实用Desktop将仓库项目clone到本地 但是更新后同步时出现了如下权限错误: Error Authentication failed. You m ...

  4. dokuwiki编辑器修改-color插件-添加按钮

    需求 dokuwiki的编辑工具栏是以 MediaWiki 的为基础发展来的. 在它的编辑器color插件的颜色按钮中,我想添加新的按钮功能.如红色字体黄色背景的修饰,类似于涂中文字强调的意思. 步骤 ...

  5. linux一切皆文件之tcp socket描述符(三)

    一.知识准备 1.在linux中,一切皆为文件,所有不同种类的类型都被抽象成文件(比如:块设备,socket套接字,pipe队列) 2.操作这些不同的类型就像操作文件一样,比如增删改查等 二.环境准备 ...

  6. 11.5 Daily Scrum

    请把现在当成11月5日······   Today's tasks  Tomorrow's tasks 丁辛 餐厅列表数据结构设计 餐厅列表UI设计             李承晗           ...

  7. Daily Scrum - 12/04

    Meeting Minutes 与Qiufeng, Bojie, Zhongqiu, Ran, Travis一起讨论. 确定了最后的UI及Feature. 开始Code Review, 以及有计划的M ...

  8. beta1

    组长:吴晓晖 过去两天完成了哪些任务: 代码重构进行中,界面,预计两个beta单位完成 展示GitHub当日代码/文档签入记录 接下来的计划 更加人性化的推荐算法 还剩下哪些任务 有哪些困难 有哪些收 ...

  9. Ns3 构建哑铃型拓扑,并实现两个点的TCP连接(详细请戳全文)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaUAAADlCAIAAAB8n38hAAAV8UlEQVR4nO3dMWjjyBoH8CkNj1uc5v

  10. 【壹拾壹周】final分数分配

    组名: 新蜂 组长: 武志远 组员: 宫成荣 谢孝淼 杨柳 李峤 项目名称: java俄罗斯方块NEO 发布时间:12.3 git地址:https://git.coding.net/Boxer_/ho ...