최대 유량

면접 대비

시간 제한1초메모리 제한128 MB

요약
용량이 주어진 수도관 네트워크에서 A번 노드에서 Z번 노드로 흐를 수 있는 최대 유량을 계산하는 문제이다.
난이도

보통10점 중 7점

유형
그래프, 구현, 시뮬레이션, DFS
정답자
아직 제출이 없습니다

문제

농부 존은 소들이 충분한 물을 마실 수 있도록, 우물에서 외양간까지 물을 보내는 배수관들의 지도를 만들었다. 배수관들은 저마다 다른 용량을 가지고 서로 우연히 연결되어 있으며, 존은 이 배수관망을 통해 흐를 수 있는 유량을 계산하고 싶다.

배수관은 다음 규칙에 따라 하나의 배수관으로 줄일 수 있다.

  • 직렬 연결: 두 배수관이 한 줄로 이어져 있으면, 두 용량 중 최솟값만큼만 흐른다. 예를 들어 용량 55인 배수관과 용량 33인 배수관이 이어지면 용량 33인 배수관 하나가 된다.
  +---5---+---3---+    ->    +---3---+
  • 병렬 연결: 두 배수관이 나란히 연결되어 있으면, 두 용량의 합만큼 흐른다.
    +---5---+
 ---+       +---    ->    +---8---+
    +---3---+
  • 막힌 배수관: 한쪽 끝이 아무것에도 연결되지 않은 배수관은 물을 흘려보내지 못하므로 제거된다.
    +---5---+
 ---+               ->    +---3---+
    +---3---+--

이 규칙들을 반복하면, 복잡하게 얽힌 배수관망도 결국 용량이 최대 유량과 같은 하나의 배수관으로 줄어든다.

예를 들어 다음 배수관망을 생각하자. 우물은 노드 AA, 외양간은 노드 ZZ이다.

                 +-----------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가 직렬로 합쳐져 용량 33인 배수관 하나가 된다.

        A+---3---+Z

배수관들의 목록이 주어질 때, 위 규칙들을 적용하여 우물 AA에서 외양간 ZZ까지 흐를 수 있는 최대 유량을 구하여라.

각 노드의 이름은 알파벳 한 글자이며, 대문자와 소문자는 서로 다른 노드로 취급한다(예: B와 b는 다른 노드). ii번째 배수관은 서로 다른 두 노드 aia_i와 bib_i를 잇고 용량 FiF_i (1≤Fi≤10001 \le F_i \le 1000)를 가진다. 물은 배수관을 양방향으로 흐를 수 있다. 같은 두 노드를 잇는 배수관이 여러 개 주어질 수도 있다.

입력

첫째 줄에 배수관의 개수 NN (1≤N≤7001 \le N \le 700)이 주어진다. 이어지는 NN개의 줄에는 각 배수관의 정보가 주어진다. 각 줄에는 배수관이 잇는 두 노드의 이름(알파벳 대문자 또는 소문자)과 그 배수관의 용량이 공백으로 구분되어 주어진다.

출력

첫째 줄에 노드 AA에서 노드 ZZ까지 흐를 수 있는 최대 유량을 출력한다.

예제4

  1. 예제 1

    입력
    5
    A B 3
    B C 3
    C D 5
    D Z 4
    B Z 6
    
    예상 출력
    3
    
  2. 예제 2

    입력
    1
    A Z 10
    
    예상 출력
    10
    
  3. 예제 3

    입력
    2
    A B 5
    B Z 3
    
    예상 출력
    3
    
  4. 예제 4

    입력
    2
    A Z 5
    A Z 3
    
    예상 출력
    8