Pagini recente » Solutii Summer Challenge, Runda 2 | Cod sursa (job #806486) | Cod sursa (job #418417) | Cod sursa (job #824351) | Cod sursa (job #3126208)
class Node:
def __init__(self, val):
self.val = val
self.rank = 0
self.child = None
self.sibling = None
class RankPairingHeap:
def __init__(self):
self.root = None
def merge(self, h1, h2):
if h1 is None:
return h2
if h2 is None:
return h1
if h1.val < h2.val:
h2.sibling = h1.child
h1.child = h2
h1.rank += 1
return h1
else:
h1.sibling = h2.child
h2.child = h1
h2.rank += 1
return h2
def insert(self, val):
new_node = Node(val)
self.root = self.merge(self.root, new_node)
def find_min(self):
return self.root.val
def delete_min(self):
if self.root is None:
return None
min_val = self.root.val
if self.root.child is None:
self.root = None
else:
new_root = None
child = self.root.child
while child is not None:
next_sibling = child.sibling
child.sibling = None
new_root = self.merge(new_root, child)
child = next_sibling
self.root = new_root
return min_val
heap = RankPairingHeap()
with open('heap.in', 'r') as file:
n=int(file.readline())
for i in range(n):
element=int(file.readline())
heap.insert(element)