만드는 중입니다

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

워크샵으로 가는 버스에 타고 안녕.

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

요약
3행 N열 버스에서 1행과 3행의 좌석을 바탕으로, 모든 칸을 식히는 데 필요한 에어컨의 최소 개수를 구합니다. 불가능하면 -1을 출력합니다.
난이도

보통10점 중 6점

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

문제

월간 향유회의 운영진들은 33행 NN열의 직사각형 모양 버스를 타고 워크샵에 가려고 한다. 버스의 11행과 33행의 각 칸에는 좌석과 에어컨이 있다. 한 칸의 에어컨을 가동하면 그 칸과 변을 공유하는 모든 칸이 시원해진다. 운영진은 총 MM명이며, 각 운영진은 버스의 한 좌석에 앉아 그 칸의 에어컨 가동 여부를 정한다. 모든 운영진은 서로 다른 좌석에 앉는다.

버스의 에어컨 시스템을 관리하는 당신은, 운영진이 앉지 않은 좌석의 에어컨을 마음대로 가동할 수 있다. 버스를 쾌적하게 유지하기 위해, 당신은 22행을 포함한 모든 칸을 시원하게 만들고 싶다. 버스의 모든 칸을 시원하게 하기 위해 가동해야 하는 에어컨의 최소 개수를 구하라. 이때 운영진이 직접 가동한 에어컨도 개수에 포함한다.

입력

첫째 줄에 버스의 열의 개수 NN과 운영진의 수 MM이 공백으로 구분되어 주어진다. (1≤M≤2×N≤400 000)(1 \le M \le 2 \times N \le 400\,000)

다음 MM개의 줄에 걸쳐 각 운영진의 정보가 xix_i, yiy_i, tit_i의 순서로 공백으로 구분되어 주어진다. ii번째 운영진은 (xix_i, yiy_i) 칸에 앉는다. ti=1t_i = 1이면 그 칸의 에어컨을 가동하고, ti=0t_i = 0이면 가동하지 않는다. (xi∈{1,3}; 1≤yi≤N; ti∈{0,1})(x_i \in \{1, 3\};\ 1 \le y_i \le N;\ t_i \in \{0, 1\})

모든 운영진은 서로 다른 좌석에 앉고, 모든 입력은 정수이다.

출력

버스의 모든 칸을 시원하게 하기 위해 가동해야 하는 에어컨의 최소 개수를 출력한다. 어떻게 가동하더라도 모든 칸을 시원하게 할 수 없다면 -1을 출력한다.

예제2

  1. 예제 1

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

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