https://www.acmicpc.net/problem/17073
풀이 과정
- 전반적인 과정은 BFS로 진행
- 루트 노드(1)부터 시작한다.
- 현재 노드에서 연결된 자식 노드 수만큼 물을 나누어서 배분시켜 준다.
- 나누어준 자식 노드로 이동하여서 다음 자식노드에게 물을 나누어준다.
- 2-3 과정을 반복한다.
- 이 때, 자식노드가 존재하여 자식노드에게 물을 나누어준 경우에는 비교를 위해 값을 0으로 설정한다. 소숫점 비교는 잘 되지 않음.
- BFS가 종료되면, 물의 양의 합계 / 물의 양이 0이 아닌 노드의 갯수 를 출력시켜 준다.
소스 코드
import sys
from collections import deque
input = lambda: sys.stdin.readline().rstrip()
N, W = map(int, input().split())
t = [[] for _ in range(N+1)]
v = [0] * (N+1)
v[1] = W
for _ in range(N-1):
a, b = map(int, input().split())
t[a].append(b)
t[b].append(a)
visited = set()
visited.add(1)
queue = deque([1])
while queue:
node = queue.popleft()
count = 0
for nx in t[node]:
if nx not in visited:
count += 1
if count == 0:
continue
each_value = v[node] / count
for nx in t[node]:
if nx not in visited:
v[nx] = each_value
visited.add(nx)
queue.append(nx)
v[node] = 0
count = 0
for i in range(1, N+1):
if v[i] != 0:
count += 1
print(sum(v) / count)
'알고리즘[Python] > 백준 알고리즘' 카테고리의 다른 글
[ 1013 ] [ DFA ] Contact (0) | 2021.11.23 |
---|---|
[ 14712 ] [ backtracking ] 넴모넴모(Easy) (0) | 2021.11.20 |
[ 2250 ] [ Tree ] 트리의 높이와 너비 (0) | 2021.11.16 |
[ 16397 ] [ BFS ] 탈출 (0) | 2021.11.13 |
[ 2872 ] 우리집엔 도서관이 있어 (0) | 2021.11.12 |