패리티 제약 최대 유량
시간 제한1초메모리 제한1024 MB
방향 그래프에서 각 간선의 정수 유량 홀짝이 주어진 p(e)와 같아야 하는 최대 s-t 유량을 구하고, 존재하지 않으면 -1을 출력합니다.
문제
flow network 는 다음과 같이 정의된다.
- 는 방향 그래프 이다.
- 는 각 간선의 용량을 나타내는 함수이다.
- 는 각각 source와 sink이며, 이다.
주어진 flow network 에 대한 - flow 는 다음 조건을 만족한다.
- 모든 에 대해 이다.
- 모든 에 대해 이다.
flow 의 값은 로 정의된다.
maximum flow는 값이 최대인 - flow이다. 모든 가 정수이면, 모든 가 정수인 maximum flow를 다항 시간에 구할 수 있음이 알려져 있다. 이러한 다항 시간 알고리즘의 예로 시간 복잡도 의 Edmonds-Karp Algorithm과 시간 복잡도 의 Dinic's Algorithm이 있다.
여기에 함수 이 추가로 주어진다. 다음 조건을 만족하는 - flow 를 parity constraint flow라고 한다.
- 모든 에 대해 는 정수이다.
- 이다.
parity constraint flow 중 값이 최대인 것을 parity constraint maximum flow라고 한다.
flow network 와 함수 가 주어졌을 때, parity constraint maximum flow를 구해 보자.
입력
과 은 그래프 의 정점 개수와 간선 개수이다.
와 는 에서 로 향하는 간선이 있음을 뜻하고, 와 는 각각 와 이다.
입력은 다음과 같이 주어진다.
N M s t
u_1 v_1 c_1 p_1
⋯
u_M v_M c_M p_M
출력
첫 번째 줄에 parity constraint maximum flow 의 값을 출력한다. parity constraint flow가 존재하지 않으면 -1을 출력한다.
parity constraint flow가 존재하면 에 대해 번째 줄에 의 값을 출력한다.
답이 여러 개이면 그중 아무것이나 출력하면 된다.
제한
- ,
- ,
- ,
- 두 정점 사이에 간선이 두 개 이상 있는 그래프는 주어지지 않는다.
- 입력에 주어진 수는 모두 정수이다.