There exists an undirected tree with n nodes numbered 0 to n - 1. You are given a 0-indexed 2D integer array edges of length n - 1, where edges[i] = [ui, vi] indicates that there is an edge between nodes ui and vi in the tree. You are also given a positive integer k, and a 0-indexed array of non-negative integers nums of length n, where nums[i] represents the value of the node numbered i.
Alice wants the sum of values of tree nodes to be maximum, for which Alice can perform the following operation any number of times (including zero) on the tree:
Choose any edge [u, v] connecting the nodes u and v, and update their values as follows:
nums[u] = nums[u] XOR k
nums[v] = nums[v] XOR k
Return the maximum possible sum of the values Alice can achieve by performing the operation any number of times.
n개 노드(0 ~ n-1)를 가진 무방향 그래프와 노드들의 가중치 및 두 노드로 구성된 간선들의 배열이 주어진다.
그래프는 반드시 사이클을 포함하지 않는다.
그리고 정수 k가 주어지는데, 사용자는 k를 이용해 특정 연산을 수행할수 있다.
한 간선을 잡아 두 점의 가중치에 전부 k로 XOR연산을 할수 있다!
위 연산은 무제한번 수행할수 있을때, 가중치의 최대 합을 구하시오.
class Solution:
def maximumValueSum(self, nums: List[int], k: int, edges: List[List[int]]) -> int:
# XOR시 늘어나는 값
t = [(i ^ k) - i for i in nums]
# 을 내림차순으로 정렬
t.sort(reverse=True)값
# 값이 증가하는 쌍을 찾아 기존의 합에 더해서 리턴한다.
ans = sum(nums)
index = 0
while index + 1 < len(t):
adder = t[index] + t[index+1]
if adder > 0:
ans += adder
else:
break
index += 2
return ans