만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

더치페이 정산

시간 제한2초메모리 제한512 MB

요약
영수증으로 각 사람의 순 잔액을 구한 뒤, 모든 사람의 잔액을 0으로 만드는 최소 이체 횟수를 구한다.
난이도

보통10점 중 7점

유형
동적 계획법, 비트 연산, 백트래킹, 그리디
정답자
아직 제출이 없습니다

문제

네덜란드 산간 지역으로 떠났던 휴가에서 막 돌아왔다. 여행 중에는 지출이 생길 때마다 나누어 내기가 번거로워서 영수증을 모두 모아 두었고, 누가 누구 몫으로 얼마를 냈는지 적어 두었다. 이제 정산할 차례다.

자기 몫을 대신 내 준 사람에게 각자 그대로 돌려주는 방법도 있다. 그러면 송금 횟수가 너무 많아지고, 여행에서 이어 온 게으름을 지키기 어렵다. 마지막에 모든 사람의 잔액이 00이 되기만 하면 누가 누구에게 보내는지는 상관없다.

정산을 끝내는 데 필요한 최소 송금 횟수를 구하라. 송금 한 번은 한 사람이 다른 한 사람에게 금액을 보내는 것이고, 모두가 원하는 만큼 보낼 현금 여유가 있다고 가정한다.

입력

첫째 줄에 사람 수 MM과 여행에서 모은 영수증 수 NN이 주어진다. 1≤M≤201 \le M \le 20, 0≤N≤10000 \le N \le 1000이다.

다음 NN개 줄에 세 정수 aa, bb, pp가 주어진다. 0≤a,b<M0 \le a, b < M, 1≤p≤10001 \le p \le 1000이며, 사람 aa가 사람 bb 몫으로 pp 유로를 냈다는 뜻이다.

출력

모든 계산을 끝내는 데 필요한 최소 송금 횟수를 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    4 2
    0 1 1
    2 3 1
    
    예상 출력
    2
    
  2. 예제 2

    입력
    5 5
    0 1 3
    1 2 3
    2 3 3
    3 4 3
    4 0 3
    
    예상 출력
    0
    
  3. 예제 3

    입력
    5 4
    0 1 1
    0 2 1
    0 3 1
    0 4 1
    
    예상 출력
    4