페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#4559

마법의 숲 5s 512MB

문제

준혁이는 엘프들이 사는 마법의 숲을 여행하려 한다.

 

마법의 숲은 n개의 휴식 포인트와 m개의 양방향 오솔길로 이루어져 있는 그래프 형태이다. 

휴식 포인트는 1, 2, ... ,  n의 번호를 가지고 있으며, 오솔길은 1, 2, ... , m의 번호를 가지고 있다.

준혁이는 1번 정점에서 출발하여 n번 정점에 도달하여야 한다.

 

숲의 오솔길에는 많은 고블린이 서식한다.

고블린은 하이 고블린과 로우 고블린의 두 가지 종류가 있다. 

준혁이는 고블린과 싸울 수 없기 때문에, 여행을 출발하기 전에 자신을 지켜줄 엘프를 고용하여야 한다.

엘프 또한 두 가지의 종류가 있는데, 하이 엘프는 하이 고블린만을 처치할 수 있으며, 로우 엘프는 로우 고블린만을 처치할 수 있다. 

또한, 한 명의 엘프는 하나의 길에서 한 마리의 고블린만을 처치할 수 있다.

예를 들어, 하이 고블린이 2마리, 로우 고블린이 3마리가 서식하는 길을 지나려면 하이 엘프를 2명 이상, 로우 엘프를 3명 이상 고용하였어야 한다.

 

엘프를 고용하는 것은 큰 비용이 들기 때문에, 준혁이는 자신이 고용해야 하는 엘프의 총 인원의 최솟값을 구하고 싶다. 

고용하는 엘프의 총 인원은 고용하는 하이 엘프와 로우 엘프의 수의 합이다.

여러분이 불쌍한 준혁이를 도와 고용해야 하는 엘프의 총 인원의 최솟값을 대신 구해주자!​ 

 


입력

입력의 첫 줄에는 휴식 포인트의 개수인 n과 오솔길의 개수인 m이 주어진다. (2 ≤​ n ≤​ 50,000, 0 ≤​ m ≤​ 100,000)

다음 m개의 줄에는 각 오솔길의 정보인 ​u​i​, v​i​, h​i​, l​i​가 주어진다. 

u​i와 vi는 i번째 오솔길이 잇는 각 휴식 포인트의 번호, 

h​i는 i번째 오솔길에 서식하는 하이 고블린의 수, 

li​는 i번째 오솔길에 서식하는 로우 고블린의 수를 나타낸다.

(1 ≤​ ui, vi≤​ n, u​i ≠ vi, 1 ≤​ hi, li  50,000) 


출력

고용해야 하는 엘프의 총 인원의 최솟값을 출력한다.

만약 준혁이가 n번 정점에 도달할 수 없다면, "-1"을 출력한다. (쌍따옴표 제외)​ 


예제 #1

4 5

1 2 19 1
2 3 8 12
2 4 12 15
1 3 17 8
3 4 1 17
32

예제 #2

3 1

1 2 1 1
-1

출처

20201030 집중강화학습2차6번, dennisstar, CCF NOI 2014 2번
로그인해야 코드를 작성할 수 있어요.