최대 유량
면접 대비시간 제한1초메모리 제한128 MB
용량이 주어진 수도관 네트워크에서 A번 노드에서 Z번 노드로 흐를 수 있는 최대 유량을 계산하는 문제이다.
문제
농부 존은 소들이 충분한 물을 마실 수 있도록, 우물에서 외양간까지 물을 보내는 배수관들의 지도를 만들었다. 배수관들은 저마다 다른 용량을 가지고 서로 우연히 연결되어 있으며, 존은 이 배수관망을 통해 흐를 수 있는 유량을 계산하고 싶다.
배수관은 다음 규칙에 따라 하나의 배수관으로 줄일 수 있다.
- 직렬 연결: 두 배수관이 한 줄로 이어져 있으면, 두 용량 중 최솟값만큼만 흐른다. 예를 들어 용량 인 배수관과 용량 인 배수관이 이어지면 용량 인 배수관 하나가 된다.
+---5---+---3---+ -> +---3---+
- 병렬 연결: 두 배수관이 나란히 연결되어 있으면, 두 용량의 합만큼 흐른다.
+---5---+
---+ +--- -> +---8---+
+---3---+
- 막힌 배수관: 한쪽 끝이 아무것에도 연결되지 않은 배수관은 물을 흘려보내지 못하므로 제거된다.
+---5---+
---+ -> +---3---+
+---3---+--
이 규칙들을 반복하면, 복잡하게 얽힌 배수관망도 결국 용량이 최대 유량과 같은 하나의 배수관으로 줄어든다.
예를 들어 다음 배수관망을 생각하자. 우물은 노드 , 외양간은 노드 이다.
+-----------6-----------+
A+---3---+B +Z
+---3---+---5---+---4---+
C D
배수관 BC와 CD가 직렬로 합쳐진다.
+-----------6-----------+
A+---3---+B +Z
+-----3-----+-----4-----+
D
이어서 BD와 DZ도 합쳐진다.
+-----------6-----------+
A+---3---+B +Z
+-----------3-----------+
이제 B와 Z 사이의 두 배수관이 병렬로 합쳐진다.
B
A+---3---+---9---+Z
마지막으로 AB와 BZ가 직렬로 합쳐져 용량 인 배수관 하나가 된다.
A+---3---+Z
배수관들의 목록이 주어질 때, 위 규칙들을 적용하여 우물 에서 외양간 까지 흐를 수 있는 최대 유량을 구하여라.
각 노드의 이름은 알파벳 한 글자이며, 대문자와 소문자는 서로 다른 노드로 취급한다(예: B와 b는 다른 노드). 번째 배수관은 서로 다른 두 노드 와 를 잇고 용량 ()를 가진다. 물은 배수관을 양방향으로 흐를 수 있다. 같은 두 노드를 잇는 배수관이 여러 개 주어질 수도 있다.
입력
첫째 줄에 배수관의 개수 ()이 주어진다. 이어지는 개의 줄에는 각 배수관의 정보가 주어진다. 각 줄에는 배수관이 잇는 두 노드의 이름(알파벳 대문자 또는 소문자)과 그 배수관의 용량이 공백으로 구분되어 주어진다.
출력
첫째 줄에 노드 에서 노드 까지 흐를 수 있는 최대 유량을 출력한다.