iwanabethedev 님의 블로그

[boj 25977] k개 사과 트리 노드만으로 배를 최대로 수확하기 본문

알고리즘

[boj 25977] k개 사과 트리 노드만으로 배를 최대로 수확하기

iwanabethedev 2026. 3. 25. 13:42

문제 링크

 

트리와 관련된 문제... 라고 할 수 있을까...

 

어떻게 풀어야할지 고민을 많이 했다.

 

n이 17보다 작거나 같다는 조건이 있었기에 그냥 브루트포스로 접근해도 되겠지 생각했지만, 어떻게든 최적화를 하고싶었다.

 

그리고 고민을 포기하고 그냥 브루트포스로 풀었다... ㅎㅎ;;

 

더보기
import sys
input = sys.stdin.readline


def solve():
    N, K = map(int, input().split())
    P = [0] * N
    
    for _ in range(N-1):
        u, v = map(int, input().split())
        P[v] = u
    
    state = list(map(int, input().split()))
    
    ans = 0
    for i in range(1<<N):
        temp = []
        for j in range(N):
            if i & (1<<j): temp.append(j)
            
        V = [0] * N
        for t in temp:
            V[t] = 1
        
        if not V[0]: continue
        
        is_available = True
        
        for t in temp:
            if not is_available: break
            
            while True:
                t = P[t]
                if t == 0: break
                
                if not V[t]:
                    is_available = False
                    break
        
        
        if is_available:
            tmp, cnt = 0, 0
            for t in temp:
                if state[t] == 1: cnt += 1
                elif state[t] == 2: tmp += 1
        
        if cnt <= K: ans = max(ans, tmp)
    
    print(ans)
    
    return


def main():
    solve()
    
    return


if __name__ == "__main__":
    main()

 

'알고리즘' 카테고리의 다른 글

[boj 7626] 직사각형  (0) 2026.03.27
[20164] 홀수 홀릭 호석  (0) 2026.03.26
[boj 34031] 하이터치☆메모리  (0) 2026.03.24
[boj 4013] ATM  (0) 2026.03.23
[boj 2085] 진법  (0) 2026.03.22