import heapq n = int(input()) nums_input = [(int(num), 0) for num in input().split()] # 每个元素为(num, 0),0表示huffman树的叶子节点 # 构造堆 nums = [] for num in nums_input: heapq.heappush(nums, num) # 构造huffman树,其为字典类型, # (key, value) = ((num, 1), (child_l, child_r, 0)) # (num, 1)中1表示huffman树的非叶子节点 # (child_l, child_r, 0)中的0后续用来表示树的深度,目前统一初始化为0 huffman = dict() for i in range(n-1): a = heapq.heappop(nums) b = heapq.heappop(nums) c = a[0] + b[0] huffman[(c, 1)] = [a, b, 0] heapq.heappush(nums, (c, 1)) # BFS遍历huffman树 queue = [huffman[nums[0]]] sum = 0 keys = huffman.keys() while queue: node = queue.pop(0) node[2] += 1 if node[0] in keys: node_l = huffman[node[0]] node_l[2] = node[2] queue.append(node_l) else: sum = sum + node[0][0] * node[2] if node[1] in keys: node_r = huffman[node[1]] node_r[2] = node[2] queue.append(node_r) else: sum = sum + node[1][0] * node[2] print(sum)