아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

가성비 유량

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

요약
용량과 비용이 있는 방향 그래프에서 비용 제곱과 최대 유량 부족분 제곱의 합을 최소화하는 흐름을 구하고 최솟값을 기약분수로 출력합니다.
난이도

어려움10점 중 8점

유형
그래프, 최단 경로, 수학
정답자
아직 제출이 없습니다

문제

야요이는 절약의 달인이다. 값이 싸다는 이유만으로 물건을 고르지는 않고, 늘 "가성비"를 따진다. 콩나물 요리에 능한 것도 그 때문이다. 절약 실력이 알려지면서 야요이에게는 온갖 비용을 줄여 달라는 부탁이 들어온다. 이번 일감은 네트워크 유량 최적화다.

방향 그래프 G=(V,E)G = (V, E)를 생각하자. V={1,2,…,∣V∣}V = \{1, 2, \dots, |V|\}는 정점 집합이고, E⊂V×VE \subset V \times V는 간선 집합이다. 각 간선 ee에는 용량 u(e)u(e)와 비용 c(e)c(e)가 붙어 있다. 두 정점 ss와 tt에 대해 함수 fs,t:E→Rf_{s,t} : E \to \mathbb{R}가 다음 두 조건을 만족하면 ss-tt 유량이라고 부른다.

  • 모든 간선 e∈Ee \in E에서 0≤fs,t(e)≤u(e)0 \le f_{s,t}(e) \le u(e)이다.
  • ss와 tt를 제외한 모든 정점 v∈V∖{s,t}v \in V \setminus \{s, t\}에서 들어오는 유량의 합과 나가는 유량의 합이 같다. 즉 ∑e=(w,v)∈Efs,t(e)=∑e=(v,w)∈Efs,t(e)\sum_{e = (w, v) \in E} f_{s,t}(e) = \sum_{e = (v, w) \in E} f_{s,t}(e)이다.

fs,tf_{s,t}의 유량값과 비용은 각각 다음과 같이 정의한다.

F(fs,t)=∑e=(s,v)∈Efs,t(e)−∑e=(v,s)∈Efs,t(e),C(fs,t)=∑e∈Efs,t(e)c(e)F(f_{s,t}) = \sum_{e = (s, v) \in E} f_{s,t}(e) - \sum_{e = (v, s) \in E} f_{s,t}(e), \qquad C(f_{s,t}) = \sum_{e \in E} f_{s,t}(e) c(e)

네트워크 유량 최적화는 보통 최대 유량을 흘리면서 비용을 최소로 만드는 문제를 뜻한다. 야요이의 기준은 가성비다. 모든 ss-tt 유량 ff에 대한 최대 유량값을 Fmax⁡=max⁡fF(f)F_{\max} = \max_f F(f)라 하고, ss-tt 유량 fs,tf_{s,t}의 균형 함수를 다음과 같이 정의한다.

B(fs,t)=C(fs,t)2+(Fmax⁡−F(fs,t))2B(f_{s,t}) = C(f_{s,t})^2 + (F_{\max} - F(f_{s,t}))^2

야요이는 BB를 최소로 만드는 유량이 가성비가 가장 좋다고 본다. 모든 ss-tt 유량에 대한 B(fs,t)B(f_{s,t})의 최솟값을 구하라.

입력

입력은 테스트 케이스 하나로 이루어진다. 첫 줄에 정점의 개수 NN (2≤N≤1002 \le N \le 100)과 간선의 개수 MM (1≤M≤1 0001 \le M \le 1\,000)이 공백 하나로 구분되어 주어진다. 둘째 줄에 두 정점 ss와 tt (1≤s,t≤N1 \le s, t \le N, s≠ts \ne t)가 주어진다. 이어지는 MM개의 줄 중 ii번째 줄에는 네 정수 aia_i, bib_i, uiu_i, cic_i가 주어진다. ii번째 간선은 aia_i에서 bib_i로 향하고 (1≤ai,bi≤N1 \le a_i, b_i \le N), 용량은 uiu_i (1≤ui≤1001 \le u_i \le 100), 비용은 cic_i (1≤ci≤1001 \le c_i \le 100)이다. 모든 ii에서 ai≠bia_i \ne b_i이고, i≠ji \ne j이면 (ai,bi)≠(aj,bj)(a_i, b_i) \ne (a_j, b_j)이다.

출력

BB의 최솟값을 기약분수로 한 줄에 출력한다. 정확히는 "u/d" 형식으로 출력하며, uu는 분자, dd는 분모다. uu와 dd는 음이 아닌 정수이고 최대공약수가 1이어야 한다. 답은 항상 유리수다. 최솟값이 0이면 "0/1"을 출력한다.

예제3

  1. 예제 1

    입력
    2 1
    1 2
    1 2 1 1
    
    예상 출력
    1/2
    
  2. 예제 2

    입력
    3 3
    1 2
    1 2 1 1
    1 3 3 1
    3 2 3 2
    
    예상 출력
    10/1
    
  3. 예제 3

    입력
    3 3
    1 2
    1 2 1 1
    1 3 7 1
    3 2 7 1
    
    예상 출력
    45/1