USACO 2015 February Silver Problem 3¶
Superbull¶
In [1]:
# compute edge weights for example data
N = 4
ID = [3,6,9,10]
for t1 in ID:
for t2 in ID:
if(t1<t2):
print(t1,t2,t1^t2)
In [2]:
result = 0
used = [False]*4
W = [0]*4
print(ID)
print("\nStart node:",ID[0])
# score the edges coming out of the zeroth node
used[0]=True
for k in range(N):
W[k] = max(W[k], ID[0] ^ ID[k])
for counter in range(N-1):
# Find nextNode, with max edge weight from the current spanning tree.
nextNode = -1
for trialNode in range(N):
if (used[trialNode]):
continue
if (nextNode == -1 or W[trialNode] > W[nextNode]):
nextNode = trialNode
# Update the result and score the edges coming out of nextNode.
print("Add node:",ID[nextNode],"Edge weight:",W[nextNode])
result += W[nextNode]
used[nextNode] = True
for k in range(N):
W[k] = max(W[k], ID[nextNode] ^ ID[k])
print("\nMax weight spanning tree:",result)