알고리즘/DFS | BFS

파이썬 | 백준 | 17073 | 나무 위의 빗물

cha-n 2020. 12. 27. 19:12

 

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