题目链接


思路:这个题就是阅读理解题,能理解题意的话应该是秒出的那种,着重解释一下题意。
题意是给定一棵完全二叉树(共2^h-1个结点),这个二叉树满足大顶堆的性质也就是父亲结点a【i】大于等于儿子结点a【i<<1】和a【i<<1|1】,现在要求你删去(2 ^h-2 ^g)个结点使得完全二叉树变成2 ^g-1个结点,删除结点的要求如伪代码所示。
伪代码的意思是:如果当前为叶子结点,则a【i】=0;否则如果a【i<<1】大于a【i<<1|1】,则a【i】等于a【i<<1】,否则等于a【i<<1|1】,现在问你怎样删才能使得最后的2 ^g-1个结点的点权和最小,输出最小值。知道题意后应该很简单了,由于是大顶堆,根据贪心原则删除a【i】显然比删除它的儿子更优,所有我们优先从前往后删,删除的过程按题意模拟即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=(1<<21)+10;
int T,h,g,a[maxn];
vector<int>ans;
int getdeep(int pos)
{if(!a[pos<<1]&&!a[pos<<1|1]) return pos;return a[pos<<1]>a[pos<<1|1]?getdeep(pos<<1):getdeep(pos<<1|1);
}
void dfs(int x)
{if(!a[x<<1]&&!a[x<<1|1]) {a[x]=0;return ;}if(a[x<<1]>a[x<<1|1]){a[x]=a[x<<1];dfs(x<<1);}else {a[x]=a[x<<1|1];dfs(x<<1|1);}
}
int main()
{scanf("%d",&T);while(T--){ans.clear();scanf("%d %d",&h,&g);for(int i=0;i<=(1<<(h+1));++i) a[i]=0;for(int i=1;i<(1<<h);++i) scanf("%d",&a[i]);for(int i=1;i<(1<<g);++i)while(getdeep(i)>(1<<g)-1) ans.push_back(i),dfs(i);ll sum=0;for(int i=1;i<(1<<g);++i) sum+=a[i];printf("%lld\n",sum);for(int i:ans) printf("%d ",i);puts("");}
}

Codeforces Round #631 (Div. 2) - Thanks, Denis aramis Shitov! E. Drazil Likes Heap(贪心+模拟)相关推荐

  1. Codeforces Round #631 (Div. 2) D. Dreamoon Likes Sequences 思维 + 组合数学

    传送门 文章目录 题意: 思路: 题意: 给你d,modd,modd,mod,让你求能构造出如下序列aaa的个数模modmodmod: 思路: 首先可以发现aaa的长度不能超过log2dlog_2dl ...

  2. Codeforces Round #631 (Div. 2) C. Dreamoon Likes Coloring 构造

    传送门 文章目录 题意: 思路: 题意: 思路: 针灸思维不行,数据结构来凑呗. 一开始做的时候想简单了,一直wawawa,后来想到了hackhackhack样例,开始换思路构造,结果死活想不到O(m ...

  3. szu cf集训Codeforces Round #631 (Div. 2)A ~ D[贪心,数据结构,思维,dp]

    A. Dreamoon and Ranking Collection 题意:题意不太好理解.简单来讲就是,给出一组数,能从1最多数到几,不够的用数来填,最多填x次.思路:代码很简单-先出现过的地方肯定 ...

  4. Codeforces Round #177 (Div. 1)C. Polo the Penguin and XOR operation【贪心】

    http://codeforces.com/contest/288/problem/C 按二进制位从大到小进行匹配 #include <cstdio> #include <cstri ...

  5. CodeForces - 1330E Drazil Likes Heap(贪心)

    题目链接:点击查看 题目大意:首先定义 n 阶完全大顶堆的概念,就是满足节点个数恰好为个,序号从 1 开始排列,对于每个节点 i 都满足 接下来给出一段伪代码,教你如何从大顶堆中删去节点 i 最后给你 ...

  6. CodeCraft-21 and Codeforces Round #711 (Div. 2)

    CodeCraft-21 and Codeforces Round #711 (Div. 2) 题号 题目 考点 A GCD Sum 签到,模拟 B Box Fitting 贪心 C Planar R ...

  7. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  8. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  9. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

最新文章

  1. bootstraptable 汇总_JS组件系列——表格组件神器:bootstrap table
  2. 百练OJ:2972: 确定进制
  3. 读取Android系统的多媒体库
  4. Android官方开发文档Training系列课程中文版:连接无线设备之通过P2P搜索网络服务
  5. html留言板 php,linux下使用Apache+php实现留言板功能的网站
  6. shell变量的使用
  7. 【洛谷】【lca+结论】P3398 仓鼠找sugar
  8. Spring----AOP的术语
  9. install4j Enterprise Edition序列号
  10. 【MySQL】MySQL中的死锁
  11. oracle临时表空间追加文件,Oracle临时表空间查看、添加临时表空间数据文件、修改默认临时表空间 方法!...
  12. python安装numpy模块教程_Python中Numpy包的安装与使用方法简明教程
  13. 详述快捷支付产品功能及设计要点
  14. 微信终于可以发送大文件了!
  15. 技术总监面试有什么技巧
  16. 压测--部署jp@gc - PerfMon Metrics Collector
  17. 拥有数据报表模板,不再愁如何制作数据报表
  18. Apache Lucene - Building and Installing the Basic Demo
  19. ubuntu 22.04版本安装
  20. 最近在学习python,做了一道人机大战的题目,分享一下,虽然可能有些麻烦,但是每个人思维是不同的。...

热门文章

  1. HTML5常用基础标签
  2. java.util.scanner sc_Java的Scanner sc=new Scanner(System.in)是什么意思
  3. [Leetcode] 58. 最后一个单词的长度
  4. WhatsApp群发软件工具,开发思路及应用场景
  5. 阿里云态势感知以及安骑士分析
  6. div超出部分出现滚动条并修改滚动条的默认样式
  7. 【计算机网络技术】根据IP地址子网掩码计算网络地址、直接广播地址、主机号以及可用IP地址的范围
  8. PFC控制系统的仿真+报告。 基于Boost电路拓扑,采用电流滞环控制方法的功率因数控制
  9. 美团脱颖而出的经验_6种真正的方法脱颖而出并获得您的第一个UX位置
  10. 了解基于视觉的长度测量