일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- programmers
- 소프트웨어공학
- 마라마라빔
- DP
- 백트래킹
- codetree
- 알고리즘
- 데이터베이스
- 함밥
- BFS
- Bellman-Ford
- 종합설계
- Kruskal
- SQL
- django
- B대면노래방
- Planned
- DFS
- 백준
- 실습
- 동적계획법
- minimum spanning tree
- 파이썬
- 최소스패닝트리
- MyPlaylist
- 프로그래머스
- 모각코
- 장고
- 그리디알고리즘
- 코드트리
Archives
- Today
- Total
Leta Learns
[모각코] 210728 Today I Learned 본문
<백준 1949번 - 우수 마을>
골드1... 함부로 건드리면 안된다... 진짜...
문제부터 잘 이해가 안 돼서 계속 읽었다. 겨우겨우 이해한 바는
- 각 노드에서 나아갈 수 있는 방향은 '우수마을' or 'not 우수마을' 이렇게 두 가지 경우.
- 루트 노드가 우수 마을이면 하위 노드는 우수 마을 일 수 없다.
- 루트 노드가 우수 마을이 아니면, 하위 노드는 우수 마을이거나 아니거나. (둘 중 최댓값....아마도)
이걸 dp에 저장하는 게 역시나 난관이었는데
dp[i][0] : 현재(i) 마을이 우수 마을이 아닌 경우
dp[i][1] : 현재(i) 마을이 우수 마을인 경우
로 저장했다.
제출했는데 recursion error 떠서 절망적이었다.. 근데 recursionlimit 풀어주니까 바로 됐다.
사실.. 어떻게 이렇게 빨리 풀 수 있었는지 잘 모르겠다.
모각코 하는 두 시간 동안 한 문제 풀기 정말 쉽지 않은데... 어쨌든 맞았으니까 넘어간다 ~!
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
def village(start):
if visited[start]:
return
visited[start] = True
for i in tree[start]:
if not visited[i]:
village(i)
dp[start][0] += max(dp[i][0], dp[i][1])
dp[start][1] += dp[i][0]
n = int(input())
people = [0] + list(map(int, input().split()))
tree = [[] for i in range(n+1)]
visited = [0 for i in range(n+1)]
dp = [[0, people[i]] for i in range(n+1)] #[i][0]: 우수마을 x, [i][1]: 우수마을
for i in range(n-1):
a, b = map(int, input().split())
tree[a].append(b)
tree[b].append(a)
village(1)
print(max(dp[1][0], dp[1][1]))
'HUFS > HUFS 모각코 캠프' 카테고리의 다른 글
[모각코] 210804 Today I Learned (0) | 2021.08.05 |
---|---|
[모각코] 210731 Today I Learned (0) | 2021.07.31 |
[모각코] 210724 Today I Learned (2) | 2021.07.24 |
[모각코] 210721 Today I Learned (0) | 2021.07.22 |
[모각코] 210717 Today I Learned (0) | 2021.07.17 |
Comments