보관함마다 초기 용량 capacities가 있어요. merges의 [a,b]마다 a와 b가 속한 그룹을 하나로 통합해요. 이미 같은 그룹이면 변하지 않아요. 그룹 용량은 속한 모든 보관함의 초기 용량 합이에요. 모든 통합 후 가장 큰 그룹 용량을 구해요.
solution(capacities, merges)가 최대 용량을 반환하도록 잘못된 한 줄을 고쳐 주세요. 제공한 find는 보관함의 그룹 대표 인덱스를 반환해요.
매개변수와 반환값
- 보관함 수 n은 1
100, 각 초기 용량은 11,000이에요. - 통합 수 m은 0
300, a와 b는 0n-1이에요. 같은 번호·중복 통합도 있을 수 있어요. - 반환값은 통합 후 최대 그룹 용량인 정수예요.
예시
capacities = [4, 7, 3],merges = [[0, 1], [2, 1], [0, 2]]이면 결과는14이에요.capacities = [2, 3, 5, 4],merges = [[0, 1], [2, 3], [1, 3]]이면 결과는14이에요.
실행용 입출력
첫 줄에 n m, 둘째 줄에 용량 n개, 다음 m줄에 a b를 입력해요. 최대 용량 하나를 출력해요.
예시 입력
3 3 4 7 3 0 1 2 1 0 2
예상 결과
14
예시 입력
4 3 2 3 5 4 0 1 2 3 1 3
예상 결과
14
핵심 개념
graph-basic: 합집합 찾기는 각 그룹을 대표하는 루트로 연결해요.parent[node] == node이면 node가 대표예요.find는 부모를 따라 대표를 찾고 돌아오며 경로를 짧게 연결해요.counting-aggregation: total은 대표 위치에만 유효한 그룹 용량을 보관해요. 같은 그룹을 다시 통합하면 용량을 더하지 않아요.array-1d:list(range(n))은 처음에 각 보관함이 자기 자신을 대표하도록 만들어요.capacities[:]는 초기 용량의 복사예요.
재귀 호출은 최대 n개의 부모를 따라가요. continue는 이미 같은 그룹인 통합을 건너뛰어요. max(식 for ... if ...)는 조건을 만족하는 값들 중 최댓값을 골라요.
입력 하네스의 input()은 한 줄의 문자열을 읽고, .split()은 공백으로 항목을 나눠요. map(int, ...)는 각 항목을 정수로 바꾸고 list(...)는 그 결과를 리스트로 모아요. range(n)은 0부터 n-1까지 반복해요. 하네스는 함수 호출을 위한 자체 연결이며 풀이의 반환 계약과 구분해요.