2019.02.03) 백준 1167번 풀이 (PyPy3)

2019. 2. 3. 21:04프로그래밍(주력)/백준 문제풀이

처음엔 간단하게 dfs로 모든 점을 검사해서 높은거 뽑으면 되는줄 알았는데 그게 안된다.

시간초과랑 1시간을 씨름한 이후, 한번 dfs돌려 최고로 나온 점에서 또 dfs를 하면 가장 최적화되게 가능하다는것을 깨달았다.

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
= int(input())
 
graph = dict()
 
# 입력
for i in range(c):
    graph[i + 1= {}
 
for i in range(c):
    input_list = list(map(int, input().split(' ')))
    for j in range(1len(input_list) - 12):
        graph[input_list[0]][input_list[j]] = input_list[j + 1]
 
# 첫번째 dfs
to_visit = [(10)]
visited = [False for i in range(c)]
visited[0= True
max_length = 0
max_node = 1
 
while to_visit:
    now, length = to_visit.pop()
    max_length, max_node = (length, now) if length > max_length else (max_length, max_node)
    for i in graph[now].keys():
        if not visited[i - 1]:
            visited[i - 1= True
            to_visit.append((i, length + graph[now][i]))
 
# 두번째 dfs
to_visit = [(max_node, 0)]
visited = [False for i in range(c)]
visited[max_node-1= True
max_length = 0
 
while to_visit:
    now, length = to_visit.pop()
    max_length = length if length > max_length else max_length
 
    for i in graph[now].keys():
        if not visited[i - 1]:
            visited[i - 1= True
            to_visit.append((i, length + graph[now][i]))
 
print(max_length)
 
cs