A Hard Problem
시간 제한20초메모리 제한1024 MB
비트 단위 등식 제약을 지키면서 그래프 간선의 xor popcount 가중치 합이 최소가 되도록 미지의 노드 값을 정한다.
문제
개의 정점과 개의 간선으로 이루어진 단순 무향 그래프가 주어진다. 정점은 부터 까지, 간선은 부터 까지 번호가 매겨진다. 정점 는 음이 아닌 정수 값 를 가지며, 간선 의 가중치 는 로 정의된다. 여기서 는 배타적 논리합 연산자(C 언어의 ^에 해당)이고, 는 음이 아닌 정수 의 이진 표현에 포함된 1의 개수다.
정점 값 은 개의 제약을 만족해야 한다. 각 제약은 5-튜플 로 나타낼 수 있다.
- 이면
- 이면
여기서 함수 는 의 번째로 낮은 비트를 반환한다. 예를 들어 은 1이고 이다. C 언어에서 가 32비트 부호 없는 정수이고 가 31 이하의 음이 아닌 정수라면, 는 ((x >> i) & 1U)로 계산할 수 있다.
아쉽게도 일부 정점의 값이 지금은 없다. 당신의 과제는 주어진 제약을 위반하지 않으면서 를 최소화하도록 그 정점들에 새 값을 할당하는 것이다. 이 과제를 해결하는 프로그램을 작성하라.
입력
입력은 다섯 부분으로 이루어진다. 첫 번째 부분은 한 줄로, 두 양의 정수 과 을 포함한다. 은 정점의 수, 은 간선의 수다. 두 번째 부분은 개의 줄로 이루어진다. 각 줄은 두 정수 와 를 포함하며, 주어진 그래프의 간선 를 나타낸다. 세 번째 부분은 한 줄로 이루어진다. 그 줄은 공백으로 구분된 개의 정수 으로 이루어진다. 임의의 에 대해 정점 값 가 없으면 는 -1이고, 그렇지 않으면 는 이다. 네 번째 부분은 하나의 정수 를 포함하며, 제약의 수를 나타낸다. 다섯 번째 부분은 개의 줄로 이루어지고, 각 줄은 공백으로 구분된 다섯 개의 정수 를 포함하며 가 제약임을 나타낸다.
출력
개의 제약 아래에서 최솟값을 정수로 출력한다. 모든 제약을 만족하는 것이 불가능하면 -1을 출력한다.