만드는 중입니다

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

패리티 제약 최대 유량

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

요약
방향 그래프에서 각 간선의 정수 유량 홀짝이 주어진 p(e)와 같아야 하는 최대 s-t 유량을 구하고, 존재하지 않으면 -1을 출력합니다.
난이도

보통10점 중 7점

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

문제

flow network (G,c,s,t)(G, c, s, t)는 다음과 같이 정의된다.

  • GG는 방향 그래프 (V,E)(V, E)이다.
  • c:E→R+c : E \rightarrow \mathbb{R}^+는 각 간선의 용량을 나타내는 함수이다.
  • s,t∈Vs, t \in V는 각각 source와 sink이며, s≠ts \ne t이다.

주어진 flow network (G,c,s,t)(G, c, s, t)에 대한 ss-tt flow ff는 다음 조건을 만족한다.

  • 모든 e∈Ee \in E에 대해 0≤f(e)≤c(e)0 \le f(e) \le c(e)이다.
  • 모든 v∈V−{s,t}v \in V-\{s, t\}에 대해 ∑(u,v)∈Ef(u,v)=∑(v,w)∈Ef(v,w)\sum_{(u,v) \in E} f(u,v) = \sum_{(v,w) \in E} f(v,w)이다.

flow ff의 값은 ∣f∣=∑(s,v)∈Ef(s,v)−∑(v,s)∈Ef(v,s)=∑(v,t)∈Ef(v,t)−∑(t,v)∈Ef(t,v)|f| = \sum_{(s,v) \in E} f(s,v) - \sum_{(v,s) \in E} f(v,s) = \sum_{(v,t) \in E} f(v,t) - \sum_{(t,v) \in E} f(t,v)로 정의된다.

maximum flow는 값이 최대인 ss-tt flow이다. 모든 c(e)c(e)가 정수이면, 모든 f(e)f(e)가 정수인 maximum flow를 다항 시간에 구할 수 있음이 알려져 있다. 이러한 다항 시간 알고리즘의 예로 시간 복잡도 O(VE2)O(VE^2)의 Edmonds-Karp Algorithm과 시간 복잡도 O(V2E)O(V^2 E)의 Dinic's Algorithm이 있다.

여기에 함수 p:E→{0,1}p : E \rightarrow \{0, 1\}이 추가로 주어진다. 다음 조건을 만족하는 ss-tt flow ff를 parity constraint flow라고 한다.

  • 모든 e∈Ee \in E에 대해 f(e)f(e)는 정수이다.
  • f(e)≡p(e)mod  2f(e) \equiv p(e) \mod 2이다.

parity constraint flow 중 값이 최대인 것을 parity constraint maximum flow라고 한다.

flow network (G,c,s,t)(G, c, s, t)와 함수 pp가 주어졌을 때, parity constraint maximum flow를 구해 보자.

입력

NN과 MM은 그래프 G=(V,E)G=(V, E)의 정점 개수와 간선 개수이다.

uiu_i와 viv_i는 uiu_i에서 viv_i로 향하는 간선이 있음을 뜻하고, cic_i와 pip_i는 각각 c(ui,vi)c(u_i, v_i)와 p(ui,vi)p(u_i, v_i)이다.

입력은 다음과 같이 주어진다.

N M s t
u_1 v_1 c_1 p_1
⋯
u_M v_M c_M p_M

출력

첫 번째 줄에 parity constraint maximum flow ff의 값을 출력한다. parity constraint flow가 존재하지 않으면 -1을 출력한다.

parity constraint flow가 존재하면 i=1,⋯ ,Mi = 1, \cdots, M에 대해 (i+1)(i+1)번째 줄에 f(ui,vi)f(u_i, v_i)의 값을 출력한다.

답이 여러 개이면 그중 아무것이나 출력하면 된다.

제한

  • 2≤N≤3002 \le N \le 300
  • 1≤M≤23 0001 \le M \le 23\,000
  • 1≤s,t≤N1 \le s, t \le N, s≠ts \ne t
  • 1≤ui,vi≤N1 \le u_i, v_i \le N, ui≠viu_i \ne v_i
  • ui≠tu_i \ne t, vi≠sv_i \ne s
  • 1≤ci≤1 000 000 0001 \le c_i \le 1\,000\,000\,000
  • pi∈{0,1}p_i \in \{0, 1\}
  • 두 정점 사이에 간선이 두 개 이상 있는 그래프는 주어지지 않는다.
  • 입력에 주어진 수는 모두 정수이다.

예제4

  1. 예제 1

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

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

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

    입력
    10 13 1 10
    1 2 1 1
    1 3 1 1
    1 4 1 1
    1 5 1 1
    1 6 1 1
    2 7 1 1
    3 7 1 1
    4 8 1 1
    5 8 1 1
    6 9 1 1
    7 9 2 0
    8 9 2 0
    9 10 5 1
    
    예상 출력
    5
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    2
    2
    5