可并堆

左偏树中

dist[x]=dist[rs[x]]+1

合并的时候,把权志较大的根作为根节点,把这棵树右子树和另一棵树合并。

说明白点:(上图描述有点问题)

设x表示根权值较大的左偏树,y表示根权值较小的左偏树,合并的时候把x的根节点当做新的树的根节点,把x左子树当做新的左子树,x的右子树和y合并的树作为新的右子树。最后比较dist,如果新的树的左子树的dist小于右子树的,交换。

int merge(int x,int y)//x y是要合并的左偏树的两个根 返回值是新树的根
{
if(!x||!y)return x|y;//一个数|0还是那个数,判断空树
if(v[x]<v[y])swap(x,y);//x是权值大的 y小
rs[x]=merge(rs[x],y);//新的右子树是原来的右子树和y的合并树
if(dist[rs[x]]>dist[ls[x]])swap(rs[x],ls[x]);//根据dist调整
dist[x]=dist[rs[x]]+1;//更新x的dist的值
return x;
}

还有...add del

int add(int x)
{
v[++cnt]=x;//先建一个只有一个节点的树
dist[cnt]=0;
root=merge(cnt,root);//然后把这个数合并
}
int del()//删除根节点(不要删除内部节点= =)
{
root=merge(ls[root],rs[root]);
//合并一个节点的左儿子和右儿子,就是删除这个点啦...
}

操作的时间复杂度都为O(log2n)

例题:hdu1512——猴子打架

某dalao的思路:

我写的“代码”(可能出问题)

void 打架(int x,int y)
{
删除x;删除y;
x.权值/=2;y.权值/=2;
加入(x原来的树,x);加入(y原来的树,y);
合并(x的树,y的树);
printf("%d\n",新树.root);
}

APIO2012 Dispatching【洛谷难度省选/NOI-】

http://www.lydsy.com/JudgeOnline/problem.php?id=2809

https://www.luogu.org/problem/show?pid=1552

void dfs(int x)
{
    sum[x]=v[x];//sum表示可并堆所有元素权值和,一开始只有自己(开销,一开始是自己的开销)
    root[x]=x;//左偏树根先是自己(一开始只有自己)
//dist=0
    num[x]=1;//元素数量,一开始没搜只有这个节点1个(忍者数量)
    for(i=x的儿子)//处理儿子
    {
        dfs(i);
        root[x]=merge(root[i],root[x]);//慢慢地建堆(慢慢地拉人入坑)
        sum[x]+=sum[i];//sum是整个左偏树的权值和(总开销)
        num[x]+=num[i];//num是整个左偏树元素数量(忍者数量)
    }
    for(;sum[x]>m;)//处理当前节点,让总权值(总开销)不超过m
    {
        sum[x]-=v[root[x]];//依次删掉最大的元素,贪心尽可能快降低总权值(减少开销)
        root[x]=merge(ls[root[x]],rs[root[x]]);//删掉权值最大的点(左子树并右子树)
        num[x]--;//可并堆元素数量减少1,(删了一个元素)
    }
    ans=max(ans,num[x]*L[x]);//取最大值(元素数量乘以领导能力(忍者数量乘以领导能力))
}

帝都Day4(3)——还是数据结构的更多相关文章

  1. 帝都Day4(2)——数据结构

    黄姓dalao is coming! 一.栈: 基本常识略. 例题:铁轨 模拟,O(n), Usaco2006 Nov 题目略 做法:单调栈(续命栈?) n//数量 a[]//奶牛 for(int i ...

  2. 帝都Day4(1)——还是dp

    其实是day4 一.洛谷P1018 乘积最大 f[i][j]表示前i个数 切成j块 用f[i][j]而不用f[i][j][k](i到j切成k块)呢? Luogu1043 前缀和(好算一段里的数的和)+ ...

  3. 学习数据结构Day4

    链表 之前看过了动态数组,栈和队列,虽然我们把第一个叫做动态数组,但是,他们的底层实质上还是静态数组.靠 resize来实现动态数组.而链表是真正的数据结构 链表需要一个节点. 数据存储在链表中 相当 ...

  4. day4:数据结构list

    1,一直输入用户名,输入Q退出,注意用户的输入别忘了加strip,和upper不区分大小写,list最后一位添加append li = [] while 1: name = input("& ...

  5. 帝都Day5——依旧是数据结构

    /*Day1.Day2我尽量整理吧*/ 树状数组 树状数组滋瓷单点修改和前缀查询 加特技可以使得树状数组支持更多操作. c[2n+1]=a[2n+1](奇数就是它本身) c[2n]≠a[2n](偶数不 ...

  6. ZROI 暑期高端峰会 A班 Day4 树上数据结构

    FBI Warning:本文含有大量人类的本质之一. 你经历过绝望吗? [ZJOI2007]捉迷藏 询问树上最远黑点对. 动态边分治可以比点分治少一个 \(\log\). bzoj3730 咕了. [ ...

  7. 数据结构之链表C语言实现以及使用场景分析

    牢骚:本篇博客两个星期前已经存为草稿,鉴于发生一些糟糕的事情,今天才基本完成.本人6月份应届毕业生一枚,毕业后当天来到帝都,之后也非常顺利,面试了俩家公司都成功了.一家做C++方面电商ERP,一家做w ...

  8. Spark菜鸟学习营Day4 单元测试程序的编写

    Spark菜鸟学习营Day4 单元测试程序的编写 Spark相比于传统代码是比较难以调试的,单元测试的编写是非常必要的. Step0:需求分析 在测试案例编写前,需完成需求分析工作,明确程序所有的输入 ...

  9. Spark Tungsten揭秘 Day4 内存和CPU优化使用

    Spark Tungsten揭秘 Day4 内存和CPU优化使用 今天聚焦于内存和CPU的优化使用,这是Spark2.0提供的关于执行时的非常大的优化部分. 对过去的代码研究,我们会发现,抽象的提高, ...

随机推荐

  1. 原生JS实现淡入淡出效果(fadeIn/fadeOut/fadeTo)

    淡入淡出效果,在日常项目中经常用到,可惜原生JS没有类似的方法,而有时小的页面并不值得引入一个jQuery库,所以就自己写了一个,已封装, 有用得着的朋友, 可以直接使用. 代码中另附有一个设置元素透 ...

  2. javascript按位操作符操作以及用途

    所有的按位操作符的操作数都会被转成补码(two's complement)形式的有符号32位整数.正数的补码是自己本身,负数的补码是取反后加一,所以经过操作运算后的值是补码形式. 描述 按位与( AN ...

  3. JSTL前台报错

    报错信息: jsp页面报错 Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core&qu ...

  4. leetcode 268 Missing Number(异或运算的应用)

    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...

  5. Gym 100801J Journey to the "The World's Start"(二分+单调队列)

    题意: 现在有1,2,3...N这N个站, 给定限定时间Limt,  N-1种票的价格, 分别对应一个最远距离,  叫你选择一种票, 满足可以在规定时间到达N站台,而且价格最低 思路: 如果买距离为L ...

  6. js基础:关于Boolean() 与 if

    最近面试比较多,但每次我问这个问题的时候,答出来的同学并不多 var a = 0; if( a) { alert(1); } 这个问题有部分人会答alert(1),   有些人会答不执行. 结果是不执 ...

  7. BZOJ5461: [PKUWC2018]Minimax

    BZOJ5461: [PKUWC2018]Minimax https://lydsy.com/JudgeOnline/problem.php?id=5461 分析: 写出\(dp\)式子:$ f[x] ...

  8. bzoj 1833: [ZJOI2010]count 数位dp

    题目: 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 题解 设\(f[i][j]\)表示长度为\(i\)的所有合法数字中有多少数码\(j\) 设\(g[i ...

  9. HDOJ1015(简单深搜)

    Safecracker Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  10. spring扩展点之四:Spring Aware容器感知技术,BeanNameAware和BeanFactoryAware接口,springboot中的EnvironmentAware

    aware:英 [əˈweə(r)] 美 [əˈwer] adj.意识到的;知道的;觉察到的 XXXAware在spring里表示对XXX感知,实现XXXAware接口,并通过实现对应的set-XXX ...