solution
더 이상 물이 움직이지 않는 상태가 되었을 때 → 물이 모두 말단 노드에 있을 때
확률 랜덤 → 말단 노드의 개수를 세서 그냥 W로 나눈다.
# 17073, 나무 위의 빗물
import sys
from collections import deque
def bfs(x):
global leaf
visited[x] = 1
q = deque()
q.append(x)
while q:
n = q.popleft()
if len(graph[n]) == 1 and visited[graph[n][0]]: # 말단 노드이면 leaf++
leaf += 1
for i in graph[n]:
if not visited[i]:
visited[i] = 1
q.append(i)
N, W = map(int, sys.stdin.readline().split())
visited = [0] * (N + 1)
graph = [[] for _ in range(N + 1)]
for _ in range(N - 1):
v1, v2 = map(int, sys.stdin.readline().split())
graph[v1].append(v2)
graph[v2].append(v1)
leaf = 0
bfs(1)
print(W/leaf)
문제 출처 www.acmicpc.net/problem/17073
17073번: 나무 위의 빗물
첫째 줄에 트리의 노드의 수 N과 1번 노드에 고인 물의 양을 의미하는 정수 W가 주어진다. (2 ≤ N ≤ 500,000, 1 ≤ W ≤ 109) 다음 N-1줄에 걸쳐, 트리에 존재하는 간선의 정보가 U V의 형태로 주어진다
www.acmicpc.net
'알고리즘 > DFS | BFS' 카테고리의 다른 글
자바 | 백준 | 12761 | 돌다리 (5) | 2021.06.05 |
---|---|
자바 | 백준 | 3109 | 빵집 (0) | 2021.02.22 |
파이썬 | 백준 | 1939 | 중량제한 (0) | 2020.11.15 |
파이썬 | 백준 | 16234 | 인구 이동 (0) | 2020.11.11 |
파이썬 | 백준 | 11559 | Puyo Puyo (0) | 2020.11.11 |