두 가지 색으로 각 건물 앞에 나무를 심는 최소 비용 배정을 유지하면서, 같음/다름 제약과 비용 갱신이 추가될 때마다 최적 비용을 출력한다.
어려움9유니온 파인드그래프동적 계획법구현아직 제출이 없습니다시간 제한2초메모리 제한256 MB연세대학교에서 대대적인 가로수 심기 작업을 한다. 학교는 이 작업에 예산이 얼마나 필요한지 미리 알아보려 한다.
학교에는 건물이 N개 있고, 각 건물 앞에 나무를 정확히 한 그루씩 심는다. 따라서 모두 N그루를 심는다. 심는 나무는 항상 두 종류 중 하나다. 하나는 은행나무로, 해충이 꼬이지 않지만 가을에 악취가 심하다. 다른 하나는 플라타너스로, 여름에 그늘을 만들어 주지만 봄에 일부 사람에게 호흡기 알레르기를 일으킬 수 있다.
학교는 건물마다 은행나무를 심을 때의 비용과 플라타너스를 심을 때의 비용을 모두 조사해 두었다. 건물이 있는 자리의 지형과 환경이 다르므로, 같은 종류의 나무라도 건물이 다르면 비용이 다를 수 있다.
학교는 최소 비용으로 모든 건물 앞에 가로수를 심는 계획을 세웠다. 그런데 뒤늦게 합류한 디자이너가 이대로 심으면 미관이 좋지 않다며 계획을 꽤 많이 고쳐야 한다고 했다. 디자이너의 요청은 두 가지 중 하나다.
설상가상으로 요청을 반영해 계획을 고치는 일이 오래 걸리는 사이에, 미리 조사해 둔 비용까지 바뀌기 시작했다. 비용은 다음 두 가지 중 하나로 바뀐다.
학교는 계획을 손수 고치는 것이 더는 무리라고 판단하고, 계속 바뀌는 요청과 가격을 실시간으로 반영해 최적의 계획을 찾아 주는 프로그램을 컴퓨터과학과에 요청했다. 학교가 요청한 프로그램을 작성해 보자.
첫 줄에 연세대학교 건물의 수 N과 지금까지 디자이너가 요청한 계획의 수 D가 주어진다. (1≤N≤200,000, 0≤D≤200,000)
건물의 번호는 1번부터 시작한다.
이어 N개의 줄에 각 건물에 은행나무를 심을 때의 비용 Gi와 플라타너스를 심을 때의 비용 Pi가 1번 건물부터 순서대로 주어진다. (1≤Gi,Pi≤109)
이어 D개의 줄에 디자이너의 요청 D개가 C i j 형태로 주어진다. (C는 0 또는 1, 1≤i≤N, 1≤j≤N, i=j)
C가 0이면 건물 i와 건물 j에 반드시 같은 종류의 나무를 심어야 한다는 뜻이고, C가 1이면 건물 i와 건물 j에 반드시 다른 종류의 나무를 심어야 한다는 뜻이다.
다음 줄에 추가로 들어오는 디자이너의 요청과 비용 변동을 합한 횟수 Q가 주어진다. (1≤Q≤200,000)
이어 Q개의 줄에 각 요청과 변동이 C A B 형태로 주어진다. 각 줄은 다음과 같이 구분된다.
디자이너의 서로 다른 두 요청 i와 j에 대해, (Ai,Bi)와 (Aj,Bj)가 일치하거나 (Ai,Bi)와 (Bj,Aj)가 일치하는 경우는 없다.
모든 요청과 변동은 누적된다.
출력은 총 Q+1개의 줄로 이루어진다.
첫 줄에는 추가적인 요청과 비용 변동이 일어나기 전, 앞서 주어진 D개의 요청만 반영했을 때 모든 건물 앞에 나무를 한 그루씩 심는 최소 비용을 출력한다.
이어 Q개의 줄에 각 요청과 변동을 반영한 직후에 모든 건물 앞에 나무를 한 그루씩 심는 최소 비용을 출력한다.
주어진 D개의 요청과 이어지는 요청을 모두 처리하는 과정에서, 모든 건물 앞에 나무를 한 그루씩 심는 것이 불가능해지는 경우는 없다.
예제에서 연세대학교에는 건물이 4개 있고, 디자이너는 우선 1번과 3번 건물 앞에 같은 나무를 심을 것을 요청했다. 이때 최적은 1번 건물부터 순서대로 은행나무, 플라타너스, 은행나무, 은행나무를 심는 것이며 비용은 17이다.
이어지는 세 가지 변동은 다음과 같다. 1번과 2번 건물 앞에 같은 나무를 심으라는 요청을 받은 뒤에는 모든 건물 앞에 은행나무를 심는 것이 최적이 되고, 비용은 18이다. 1번과 4번 건물 앞에 다른 나무를 심어야 한다는 요청을 받은 뒤에는 플라타너스, 플라타너스, 플라타너스, 은행나무를 심는 것이 최적이고, 비용은 30이다. 마지막으로 4번 건물에 플라타너스를 심는 비용이 100에서 1로 바뀌면서, 최적의 계획은 은행나무, 은행나무, 은행나무, 플라타너스를 심는 것이 되고 비용은 18이다.