Parity Constraint Maximum Flow

아직 제출이 없습니다시간 제한1초메모리 제한1024 MB

문제

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

  • GG는 방향 그래프 (V,E)(V, E)를 의미한다.
  • c:ER+c : E \rightarrow \mathbb{R}^+는 간선의 capacity를 나타내는 함수다.
  • s,tVs, t \in V는 각각 source와 sink를 의미하고, sts \ne t를 만족한다.

주어진 flow network (G,c,s,t)(G, c, s, t)에 대한 ss-tt flow ff는 다음과 같이 정의된다.

  • 모든 eEe \in E에 대해서 0f(e)c(e)0 \le f(e) \le c(e)를 만족한다.
  • 모든 vVs,tv \in V-\\{s, t\\}에 대해서 _(u,v)Ef(u,v)=_(v,w)Ef(v,w)\displaystyle \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)\displaystyle |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는 주어진 flow network (G,c,s,t)(G, c, s, t)에 대한 ss-tt flow 중 값이 최대인 ss-tt flow를 의미한다. 모든 c(e)c(e)가 정수라면, 모든 f(e)f(e)가 정수인 maximum flow ff를 다항 시간에 구할 수 있음이 알려져 있다. 이에 대한 다항 시간 알고리즘의 예시로, 시간 복잡도 O(VE2)O(VE^2)Edmonds-Karp Algorithm과 시간 복잡도 O(V2E)O(V^2 E)Dinic's Algorithm이 있다.

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

  • 모든 eEe \in E에 대해서 f(e)f(e)는 정수여야 한다.
  • f(e)p(e)f(e) \equiv p(e) modmod 22

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

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

입력

NNMM은 주어진 그래프 G=(V,E)G=(V, E)의 정점의 개수와 간선의 개수를 의미한다

u_iu\_iv_iv\_iu_iu\_i에서 v_iv\_i로 향하는 간선이 있음을 의미하고, c_ic\_ip_ip\_i는 각각 c(u_i,v_i)c(u\_i, v\_i)p(u_i,v_i)p(u\_i, v\_i)를 의미한다.

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

NN MM ss tt

u_1u\_1 v_1v\_1 c_1c\_1 p_1p\_1

\cdots

u_Mu\_M v_Mv\_M c_Mc\_M p_Mp\_M

출력

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

만약에 parity constraint flow가 존재한다면, i=1,,Mi = 1, \cdots, M에 대해서 (i+1)(i+1)번째 줄에 f(u_i,v_i)f(u\_i, v\_i)의 값을 출력한다.

답이 여러 개가 있는 경우, 그중 아무것이나 출력하면 된다.

제한

  • 2N3002 \le N \le 300
  • 1M23,000\displaystyle 1 \le M \le 23\\,000
  • 1s,tN1 \le s, t \le N, sts \ne t
  • 1u_i,v_iN1 \le u\_i, v\_i \le N, u_iv_iu\_i \ne v\_i
  • u_itu\_i \ne t, v_isv\_i \ne s
  • 1c_i1,000,000,0001 \le c\_i \le 1\\,000\\,000\\,000
  • p_i0,1p\_i \in \\{0, 1\\}
  • 두 정점 사이에 두 개 이상의 간선이 있는 그래프는 주어지지 않는다.
  • 입력에 주어진 수들은 전부 정수다.