https://www.acmicpc.net/problem/1967
1967번: 트리의 지름
파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연
www.acmicpc.net
문제 접근
생각해내는데 오래걸리는 문제였다.
두 노드사이의 거리가 가장 멀리있는 노드 둘을 찾아서 가중치의 합을 출력해야한다.
가장 멀리있는 노드 두개를 찾는 방법은 이렇게 하면 된다.
1. 1번노드에서 가장 멀리있는 노드(n1)를 찾는다.
2. n1에서 가장 멀리있는 노드를 찾는다.
이렇게하면 가장 멀리있는 두 노드를 찾을 수 있다.
dfs를 2번만 사용하면 된다는 것.
모든 노드에 대해 dfs를 하면 시간초과로 틀린다.
코드
import sys
input = sys.stdin.readline
"""
1번에서 가장 멀리있는 점을 시작점으로 정함
시작점을 기준으로 DFS.
가중치 총 합 출력
"""
n = int(input())
tree = [[] for i in range(n+1)]
for i in range(n-1):
start, end, weight = map(int,input().split())
tree[start].append((end, weight))
tree[end].append((start, weight))
ans = 0
def dfs(start):
global ans
visited = [False] * (n+1)
visited[start] = True
sum_w = [0] * (n+1)
list = [start]
while list:
s = list.pop()
for e, w in tree[s]:
if not visited[e]:
visited[e] = True
list.append(e)
sum_w[e] = sum_w[s] + w
ans = max(sum_w)
return sum_w.index(ans)
dfs(dfs(1))
print(ans)
33828 | 60 |
'백준 > 문제풀이_python' 카테고리의 다른 글
11779 최소비용 구하기 2 python (0) | 2023.01.09 |
---|---|
1504 특정한 최단 경로 python (0) | 2023.01.08 |
11724 연결 요소의 개수 python (0) | 2023.01.07 |
11866 요세푸스 문제 0 python (0) | 2023.01.07 |
1916 최소비용 구하기 (0) | 2023.01.07 |
댓글