-
Notifications
You must be signed in to change notification settings - Fork 0
/
tarjtest +winput.py
90 lines (73 loc) · 1.32 KB
/
tarjtest +winput.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
'''
1 1
1 2
1 3
1 4
1 5
2 1
2 3
3 4
3 5
3 6
4 1
4 2
5 3
5 4
5 6
6 4
6 5
6 6
8 8
graph = {
'1':['1','2','3','4','5'],
'2':['1','3'],
'3':['4','5','6'],
'4':['1','2'],
'5':['3','4','6'],
'6':['4','5','6'],
'8':['8']
}
'''
graph = {}
maxim = 0
mem = 0
old = -1
f = open('input.txt', 'r')
for line in f:
splitLine = line.split()
if ( old != splitLine[0] ):
graph[splitLine[0]] = []
old = splitLine[0]
graph[splitLine[0]] += splitLine[1]
f.close()
#print graph
def tarjan(graph):
#result = []
stack = []
low = {}
def visit(node):
if node in low:
return
num = len(low)
low[node] = num
stack_pos = len(stack)
stack.append(node)
for successor in graph[node]:
visit(successor)
low[node] = min(low[node], low[successor])
if num == low[node]:
component = tuple(stack[stack_pos:])
global maxim
if len(component) > maxim:
maxim = len(component)
global mem
mem = component
del stack[stack_pos:]
#result.append(component)
for item in component:
low[item] = len(graph)
for node in graph:
visit(node)
#return result
tarjan(graph)
print mem