Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- web
- C언어
- JavaScript
- server
- 생활코딩
- 인프런
- BASIC
- graph
- Python
- String
- udemy
- BFS
- Cleancode
- sorting
- Math
- Algorithm
- Algospot
- 따배씨
- 따라하면서 배우는 C언어
- programmers
- php
- 종만북
- dfs
- DP
- greedy
- 따라하며 배우는 C언어
- BOJ
- 정수론
- 백준
- C
Archives
- Today
- Total
몽상실현개발주의
[BOJ] 1967 / 트리의 지름 / Python 파이썬 본문
[BOJ] 1967 / 트리의 지름 / Python 파이썬
https://www.acmicpc.net/problem/1967
풀이
전날 풀었던 [BOJ] 1167 / 트리의 지름 / Python 파이썬 문제와 같이 Tree 의 지름을 구하는 문제이다.
다시 복습하자면,
- Tree 의 지름 : 가장 먼 두 정점 사이의 거리 혹은 가장 먼 두 정점을 연결하는 경로
- 선형 시간내에 Tree 의 지름을 구하는 Algorithm
- 트리에서 임의의 정점 xx를 잡는다.
- 정점 xx에서 가장 먼 정점 yy를 찾는다
- 정점 yy에서 가장 먼 정점 zz를 찾는다.
import sys
from collections import deque
def BFS(start, finish=0):
global N
dq = deque()
dq.append((start, 0))
visited = [0] * (N+1)
res = 0
maxNode = 0
while dq:
f, add = dq.popleft()
visited[f] = 1
if finish and f == finish:
return add
for info in tree[f]:
if visited[info[0]]:
continue
if res < add+info[1]:
res = add + info[1]
maxNode = info[0]
dq.append((info[0], add+info[1]))
return maxNode
input = sys.stdin.readline
N = int(input())
tree = [[] for _ in range(N+1)]
for _ in range(N-1):
r, c, l = map(int, input().split())
tree[r].append((c, l))
tree[c].append((r, l))
v = BFS(1)
e = BFS(v)
print(BFS(v, e))
참고 블로그
'Algorithm PS > BOJ' 카테고리의 다른 글
[BOJ] 2805 / 나무 자르기 / Python 파이썬 (0) | 2021.06.18 |
---|---|
[BOJ] 1654 / 랜선 자르기 / Python 파이썬 (0) | 2021.06.16 |
[BOJ] 1167 / 트리의 지름 / Python 파이썬 (0) | 2021.06.15 |
[BOJ] 11725 / 트리의 부모 찾기 / Python 파이썬 (0) | 2021.06.14 |
[BOJ] 1991 / 트리 순회 / Python 파이썬 (0) | 2021.06.14 |
Comments