-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path350b_resort.py
executable file
·30 lines (25 loc) · 967 Bytes
/
350b_resort.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
#! /usr/bin/python
import sys
MTN, HOTEL = 0, 1
def dfs(hotel_idx, types, paths, out_degree_map):
best_path = [hotel_idx]
parent = paths[hotel_idx - 1]
while parent != 0 and out_degree_map.get(parent, 0) == 1:
best_path.append(parent)
parent = paths[parent - 1]
best_path.reverse()
return {'length': len(best_path), 'paths': best_path}
if __name__ == '__main__':
sys.stdin.readline()
types = map(int, sys.stdin.readline().split())
paths = map(int, sys.stdin.readline().split())
out_degree_map = {}
for i in range(len(paths)):
parent = paths[i]
if parent != 0:
out_degree_map[parent] = out_degree_map.get(parent, 0) + 1
result = [dfs(i + 1, types, paths, out_degree_map) for i in range(len(types)) if types[i] == HOTEL]
result.sort(lambda a, b: a['length'] - b['length'])
best = result[-1]
print best['length']
print ' '.join([str(i) for i in best['paths']])