문제 링크
https://www.acmicpc.net/problem/1967
1967번: 트리의 지름
파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연
www.acmicpc.net
소스 코드
import sys
sys.setrecursionlimit(10**6)
def main():
n = int(input())
visited = [False] * (n+1)
distance = [0] * (n+1)
graph = [[] for _ in range(n+1)]
for _ in range(n-1):
parent, child, weight = map(int, sys.stdin.readline().strip().split())
graph[parent].append((weight, child))
graph[child].append((weight, parent))
dfs(1, graph, visited, distance)
v = max(range(1,n+1), key=lambda x: distance[x])
visited = [False] * (n+1)
distance = [0] * (n+1)
dfs(v, graph, visited, distance)
u = max(range(1,n+1), key=lambda x: distance[x])
print(distance[u])
def dfs(x, graph, visited, distance):
visited[x] = True
for weight, nx in graph[x]:
if not visited[nx]:
distance[nx] = distance[x] + weight
dfs(nx, graph, visited, distance)
if __name__ == '__main__':
main()
해설
- 그래프, 트리, DFS
똑같은 로직으로 풀 수 있는 문제가 있어서 어제 트리의 지름 문제를 풀었는데 오늘도 풀게 되었습니다.
풀이 로직이 완전히 동일하고 입력 방식에만 차이가 있습니다.
따라서 해설을 작성하지는 않고 이전 게시물의 링크를 첨부하겠습니다.
오늘 얻은 교훈은..
1. 백준에서 파이썬으로 재귀 함수를 사용할 때는 setrecursionlimit 함수를 반드시 사용하자(^^..)
2. print문으로 디버깅했으면 반드시 지우자..(소중한 시간이 잔뜩 증발 🤬)
https://chanmuzi.tistory.com/199
[BOJ] 1167 : 트리의 지름 [그래프이론/트리](Python)
문제 링크 https://www.acmicpc.net/problem/1167 1167번: 트리의 지름 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선
chanmuzi.tistory.com
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 11660 : 구간 합 구하기 5 [누적합](Python) (0) | 2023.03.29 |
---|---|
[BOJ] 2263 : 트리의 순회 [트리, 분할정복](Python) (0) | 2023.03.28 |
[BOJ] 1167 : 트리의 지름 [그래프이론/트리](Python) (0) | 2023.03.24 |
[BOJ] 1916 : 최소비용 구하기 [그래프이론](Python) (0) | 2023.03.23 |
[BOJ] 13549 : 숨바꼭질 3 [그래프이론](Python) (0) | 2023.03.22 |