1240. 完全二叉树的权值

弱弱的用bfs过了,双指针再说吧。。。

#include<iostream>
#include<queue>

using namespace std;

#define LL long long

typedef struct{
    int v, u, idx;
}Node;

const int N = 100010, M = 20;

int tr[N];
int n;
LL level[M];
int cnt;

void bfs(){
    queue<Node> q;
    q.push({tr[1], 1, 1});
    
    while(q.size()){
        auto h = q.front();
        q.pop();
        
        int v = h.v, u = h.u, idx = h.idx;
        
        level[u] += v;
        cnt = max(cnt, u);
    
        if(idx * 2 <= n) q.push({tr[idx * 2], u + 1, idx * 2});
        if(idx * 2 + 1 <= n) q.push({tr[idx * 2 + 1], u + 1, idx * 2 + 1});
    }
}

int main(){
    cin >> n;
    
    for(int i = 1; i <= n; i ++) cin >> tr[i];
    
    bfs();
    
    LL maxv;
    int res;
    for(int i = 1; i <= cnt; i ++){
        if(i == 1){
            maxv = level[1];
            res = 1;
        }else if(maxv < level[i]){
            maxv = level[i];
            res = i;
        }
    }
    
    cout << res << endl;
    
    return 0;
}
posted @ 2020-10-01 17:16  yys_c  阅读(193)  评论(0编辑  收藏  举报