미친 회로

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

요약
각 부품이 요구하는 전류량이 정해진 유향 비순환 회로에서 모든 부품에 충분한 전류를 공급하기 위해 + 단자에 넣어야 하는 최소 전류를 구하거나 불가능을 판정한다.
난이도

보통10점 중 7점

유형
그래프, 동적 계획법, 그리디, 위상 정렬
정답자
아직 제출이 없습니다

문제

당신은 새 로봇을 위한 회로 기판을 막 완성했고, 이제 여기에 전원을 공급해야 합니다. 로봇 회로는 여러 개의 전기 부품으로 이루어져 있으며, 각 부품은 동작하기 위해 일정한 크기의 전류가 필요합니다. 모든 부품에는 + 단자와 - 단자가 있으며, 이들은 기판 위의 접점(junction)에서 서로 연결됩니다. 전류는 부품을 +에서 - 방향으로 흐릅니다(단, 부품은 전류를 '소모'하지 않습니다. +로 들어온 전류는 모두 그대로 -로 나갑니다).

접점에는 1,…,N1, \dots, N 번호가 매겨져 있고, 여기에 더해 전원 공급 단자가 연결되는 두 개의 특수 접점 +와 -가 있습니다. + 단자에는 부품의 + 리드만, - 단자에는 부품의 - 리드만 연결됩니다. 각 접점에서, 연결된 부품들의 - 리드로 들어온 전류는 모두 연결된 + 리드로 나가며, 각 + 리드로 얼마만큼의 전류를 보낼지는 당신이 자유롭게 조절할 수 있습니다(그 구체적인 방법은 이 문제의 범위를 벗어납니다). 또한 회로는 전류가 고리를 이루며 흐를 수 있는 되먹임 루프(feedback loop)가 존재하지 않도록 조립되어 있습니다.

그림 1: 올바른 회로도 두 가지 예. (a)에서는 모든 부품이 + 단자에서 - 단자로 향하는 방향 경로를 따라 전원을 공급받을 수 있습니다. (b)에서는 접점 4에서 - 단자로 가는 방향 경로가 없으므로 부품 4와 6에 전원을 공급할 수 없습니다.

전력을 아끼고 회로가 과열되지 않도록, 로봇을 동작시키는 데 필요한 전류를 가능한 한 적게 사용하고 싶습니다. 모든 부품이 각자 필요한 만큼의 전류를 공급받아 정상 동작하도록 하려면, + 단자로 흘려보내야 하는(그리고 반드시 - 단자로 모두 빠져나가는) 전류의 최솟값은 얼마입니까?

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스의 첫 줄에는 두 정수 NN과 MM이 주어집니다. NN (0≤N≤500 \le N \le 50)은 +와 - 단자를 제외한 접점의 개수이고, MM (1≤M≤2001 \le M \le 200)은 회로도에 있는 부품의 개수입니다. 이어지는 MM개의 줄에는 각각 하나의 부품에 대한 설명이 주어집니다. ii번째 부품 설명은 세 개의 필드로 이루어집니다: 부품이 연결된 +쪽 접점 pip_i, -쪽 접점 nin_i, 그리고 부품 ii가 동작하는 데 필요한 최소 전류 IiI_i (1≤Ii≤1001 \le I_i \le 100)입니다. 접점 pip_i와 nin_i는 각각 + 단자를 뜻하는 문자 +, - 단자를 뜻하는 문자 -, 또는 번호가 매겨진 접점 중 하나를 뜻하는 11 이상 NN 이하의 정수로 주어집니다. 어떤 두 부품도 +쪽 접점과 -쪽 접점이 동시에 같지는 않습니다. 입력의 끝은 N=M=0N = M = 0인 잘못된 테스트 케이스로 표시되며, 이 케이스는 처리하지 않습니다.

출력

각 테스트 케이스에 대해, 모든 부품이 전원을 공급받도록 보장하기 위해 + 단자에 공급해야 하는 전류의 최솟값을 정수 하나로 출력합니다. 만약 모든 부품에 동시에 충분한 전류를 보낼 방법이 없다면, impossible을 출력합니다.

예제3

  1. 예제 1

    입력
    6 10
    + 1 1
    1 2 1
    1 3 2
    2 4 5
    + - 1
    4 3 2
    3 5 5
    4 6 2
    5 - 1
    6 5 3
    4 6
    + 1 8
    1 2 4
    1 3 5
    2 4 6
    3 - 1
    3 4 3
    0 0
    
    예상 출력
    9
    impossible
    
  2. 예제 2

    입력
    0 1
    + - 5
    0 0
    
    예상 출력
    5
    
  3. 예제 3

    입력
    1 2
    + 1 3
    1 - 2
    0 0
    
    예상 출력
    3