용량과 비용이 있는 방향 그래프에서 비용 제곱과 최대 유량 부족분 제곱의 합을 최소화하는 흐름을 구하고 최솟값을 기약분수로 출력합니다.
어려움8그래프최단 경로수학아직 제출이 없습니다시간 제한2초메모리 제한256 MB야요이는 절약의 달인이다. 값이 싸다는 이유만으로 물건을 고르지는 않고, 늘 "가성비"를 따진다. 콩나물 요리에 능한 것도 그 때문이다. 절약 실력이 알려지면서 야요이에게는 온갖 비용을 줄여 달라는 부탁이 들어온다. 이번 일감은 네트워크 유량 최적화다.
방향 그래프 G=(V,E)를 생각하자. V={1,2,…,∣V∣}는 정점 집합이고, E⊂V×V는 간선 집합이다. 각 간선 e에는 용량 u(e)와 비용 c(e)가 붙어 있다. 두 정점 s와 t에 대해 함수 fs,t:E→R가 다음 두 조건을 만족하면 s-t 유량이라고 부른다.
fs,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)
네트워크 유량 최적화는 보통 최대 유량을 흘리면서 비용을 최소로 만드는 문제를 뜻한다. 야요이의 기준은 가성비다. 모든 s-t 유량 f에 대한 최대 유량값을 Fmax=maxfF(f)라 하고, s-t 유량 fs,t의 균형 함수를 다음과 같이 정의한다.
B(fs,t)=C(fs,t)2+(Fmax−F(fs,t))2
야요이는 B를 최소로 만드는 유량이 가성비가 가장 좋다고 본다. 모든 s-t 유량에 대한 B(fs,t)의 최솟값을 구하라.
입력은 테스트 케이스 하나로 이루어진다. 첫 줄에 정점의 개수 N (2≤N≤100)과 간선의 개수 M (1≤M≤1000)이 공백 하나로 구분되어 주어진다. 둘째 줄에 두 정점 s와 t (1≤s,t≤N, s=t)가 주어진다. 이어지는 M개의 줄 중 i번째 줄에는 네 정수 ai, bi, ui, ci가 주어진다. i번째 간선은 ai에서 bi로 향하고 (1≤ai,bi≤N), 용량은 ui (1≤ui≤100), 비용은 ci (1≤ci≤100)이다. 모든 i에서 ai=bi이고, i=j이면 (ai,bi)=(aj,bj)이다.
B의 최솟값을 기약분수로 한 줄에 출력한다. 정확히는 "u/d" 형식으로 출력하며, u는 분자, d는 분모다. u와 d는 음이 아닌 정수이고 최대공약수가 1이어야 한다. 답은 항상 유리수다. 최솟값이 0이면 "0/1"을 출력한다.