1 条题解

  • 0
    @ 2025-8-24 22:41:25

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar ___w
    **

    搬运于2025-08-24 22:41:25,当前版本为作者最后更新于2023-03-30 16:09:55,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    solution

    题意简述

    • 给定一个完全二叉树。

    • 求同一深度的节点权值之和最大的深度(深度为第二关键字)。

    • 1N1051≤N≤10^50Ai1050 \le |A_i| \le 10^5

    完全二叉树的性质

    完全二叉树

    设深度为 depdep,根节点的深度为 11。则有第 depdep 层的节点为 2dep2^{dep},每层开头的节点编号为 2dep12^{dep-1},末尾的节点编号为 2dep12^{dep}-1(以上结论叶子节点除外)。

    题目分析

    有了以上的性质,我们不难想到解题思路:可以对序列 aa 进行划分层次,即完全二叉树的每一层,再找最大权值之和。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int n, a, sum, ans, dep = 1, Max = -1e9;
    int main() {
    	cin >> n;
    	for (int i = 1; i <= n; ++i) {
    		cin >> a;
    		sum += a;
    		if (i == (1 << dep)-1) {//若是末尾节点,切换到下一层
    			if (sum > Max) {//找到可行解
    				Max = sum;
    				ans = dep;
    			}
    			++dep;
    			sum = 0;
    		}
    	}
    	if (sum > Max) {//特判叶子节点
    		Max = sum;
    		ans = dep;
    	}
    	cout << ans;
    	return 0;
    }
    
    • 1

    [蓝桥杯 2019 省 AB] 完全二叉树的权值

    信息

    ID
    7028
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者