직렬/병렬 저항 회로

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

요약
주어진 회로에서 직렬 및 병렬 저항 쌍을 반복해 합치고, A와 Z 사이의 등가 저항을 구해 출력하며 불가능하면 -1.000을 출력한다.
난이도

보통10점 중 6점

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

문제

아래에 직렬/병렬 저항 회로가 그려져 있다.

각 저항 옆에는 그 저항값이 적혀 있다. 두 개 이상의 저항을 잇는 연결점(여러 저항을 잇는 선이 만나는 지점)은 대문자 하나로 나타낸다. 문자 A와 Z는 회로의 양 끝인 두 연결점의 이름으로 예약되어 있다. 우리의 목표는 이 회로의 등가 저항, 즉 A와 Z 사이의 등가 저항을 구하는 것이다.

회로 안의 각 저항은 그 두 끝점인 연결점과 저항값으로 이루어진 세 값의 조합으로 나타낼 수 있다. 예를 들어 저항값이 99인 저항은 (C,D,9)(C, D, 9) 또는 (D,C,9)(D, C, 9)로 나타낼 수 있다. 회로 명세는 그 회로에 있는 모든 저항 명세의 집합이다.

두 저항이 어떤 연결점을 공유하고 그 연결점에 다른 저항이 하나도 연결되어 있지 않으면, 두 저항은 직렬이다(예를 들어 저항 66과 99는 모두 CC에 연결되어 있고, CC에는 그 밖의 어떤 것도 연결되어 있지 않다). 직렬인 두 저항은 저항값이 두 저항값의 합인 하나의 등가 저항으로 바꿀 수 있다(위 예에서는 1515).

두 저항의 양쪽 끝점이 모두 같은 연결점이면, 두 저항은 병렬이다(예를 들어 저항 33과 1010은 모두 RR과 DD에 연결되어 있다). 병렬인 두 저항은 저항값이 두 저항값의 역수의 합의 역수인 하나의 등가 저항으로 바꿀 수 있다(위 예에서는 (13+110)−1=2.307692\left(\frac{1}{3} + \frac{1}{10}\right)^{-1} = 2.307692).

올바른 형태의 직렬/병렬 회로의 등가 저항은, 직렬 또는 병렬인 저항 쌍을 하나의 등가 저항으로 계속 바꿔 나가 저항이 하나만 남을 때까지 반복하여 구할 수 있다. 이 방법이 저항 하나만 남기기 전에 더 이상 진행되지 않으면, 그 회로는 올바른 형태가 아니다. 예를 들어 휘트스톤 브리지 회로(아래 그림)는 올바른 형태의 직렬/병렬 회로가 아니다.

입력

여러 개의 회로 명세가 주어질 수 있다. 각 회로에 대해 첫 번째 줄에는 회로에 있는 저항의 개수를 나타내는 정수 NN (N≤1000N \le 1000)이 주어진다. 그 뒤로 NN개의 줄에 각각 저항 명세가 다음 형식으로 주어진다.

X Y r

여기서 XX와 YY는 대문자이고, rr은 양의 정수 저항값이다(r<100r < 100). 등가 저항은 항상 100100을 넘지 않음이 보장된다. 00 하나만 있는 줄이 입력의 끝을 나타낸다.

출력

각 회로에 대해, 회로가 올바른 형태여서 AA와 ZZ 사이의 하나의 등가 저항으로 줄어들면, 그 등가 저항을 소수점 아래 셋째 자리까지 반올림하여 정확히 세 자리로 출력한다. 회로가 올바른 형태가 아니거나 AA와 ZZ 사이에 등가 저항이 존재하지 않으면 대신 -1.000을 출력한다. 출력 사이에 빈 줄을 넣지 않는다.

예제4

  1. 예제 1

    입력
    8
    N R 2
    D R 3
    R N 2
    R D 10
    Z R 7
    C D 9
    N C 6
    A N 4
    2
    A Z 3
    Z A 10
    2
    P A 6
    P Z 9
    5
    A B 1
    B Z 4
    A C 8
    C Z 19
    B C 12
    0
    
    예상 출력
    11.945
    2.308
    15.000
    -1.000
    
  2. 예제 2

    입력
    1
    A Z 5
    0
    
    예상 출력
    5.000
    
  3. 예제 3

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

    입력
    2
    A Z 6
    A Z 6
    0
    
    예상 출력
    3.000