-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtech.py
96 lines (67 loc) · 2.34 KB
/
tech.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
class Node(object):
def __init__(self, name, parent=None, children=None):
self.name = name
self.parent = parent
if not children:
children = []
self.children = children
def __repr__(self):
if self.parent:
return "<Node name=%r parent=%r children=%r>" % (self.name, self.parent.name, [x.name for x in self.children])
else:
return "<Node name=%r parent=%r, children=%r>" % (self.name, self.parent, [x.name for x in self.children])
class Tree(object):
def __init__(self):
self.nodes = {}
def create_node(self, name):
if name not in self.nodes:
node = Node(name)
self.nodes[name] = node
return node
else:
return self.nodes[name]
def create_node_parent(self, name, parent):
node = self.create_node(name)
parent_node = self.create_node(parent)
node.parent = parent_node
parent_node.children.append(node)
f = open("tech.txt")
no_cases = int(f.readline())
for case_id in xrange(no_cases):
techs = []
no_technologies = int(f.readline())
for tech_id in xrange(no_technologies):
techs.append(f.readline().strip().split(":"))
dsts = []
no_dsts = int(f.readline())
for dst_id in xrange(no_dsts):
dsts.append(f.readline().strip())
tree = Tree()
for tech1, tech2 in techs:
tree.create_node_parent(tech2, tech1)
sol = []
for dst in dsts:
try:
nodes = [tree.nodes[dst]]
except KeyError:
sol.append(dst)
continue
def print_tree(nodes, retval):
if not nodes:
return
for node in nodes:
print_tree(node.children, retval)
retval.append(node)
print_tree(nodes, sol)
seen = set()
sols_f = []
for s in sol:
if s not in seen:
seen.add(s)
if type(s) == str:
sols_f.append(s)
else:
sols_f.append(s.name)
print "Case #%d: %d" % (case_id+1, len(sols_f))
for sol_f in sols_f:
print sol_f