2단 라우터
시간 제한2초메모리 제한512 MB
N과 연결 수 상한, 전력 상한이 주어질 때 수집기와 분배기를 두어 모든 조건을 만족하는 2단 라우터 그래프를 구성한다.
문제
라우터는 노드와, 서로 다른 두 노드를 잇는 단방향 연결로 이루어진다.
- 입력 노드 개, 번호는 부터 까지
- 출력 노드 개, 번호는 부터 까지
- 내부 노드 개, 번호는 부터 까지
- 단방향 연결 개
노드 가 노드 로 데이터를 보낼 수 있다는 것은, 이거나, 가 데이터를 보낼 수 있는 노드 가 있고 에서 로 가는 연결이 있다는 뜻이다. 이고 가 로 데이터를 보낼 수 있을 때, 에서 로 가는 데이터 경로는 , 인 연결의 집합 ()이다.
라우터는 다음을 모두 만족할 때 제대로 동작한다.
- 모든 입력 노드는 모든 출력 노드로 데이터를 보낼 수 있다.
- 입력 노드는 자기 자신에게서만 데이터를 받는다.
- 출력 노드는 자기 자신에게만 데이터를 보낸다.
- 이고 가 로 데이터를 보낼 수 있으면, 는 로 데이터를 보낼 수 없다.
- 이고 가 로 데이터를 보낼 수 있으면, 에서 로 가는 데이터 경로는 하나뿐이다. 특히 두 노드를 잇는 연결은 많아야 하나다.
노드 의 전력은 로 정의한다. 는 로 데이터를 보낼 수 있는 입력 노드의 수, 는 에게서 데이터를 받을 수 있는 출력 노드의 수다. 라우터의 최대 전력은 이다.
, , 이 주어진다. 출력 항목이 설명하는 방법으로 라우터를 만들어라. 이 라우터는 제대로 동작하고, 연결을 개 이하로 쓰며, 최대 전력이 이하이고, 노드를 모두 합쳐 500000개 이하로 쓴다.
입력
첫째 줄에 정수 , , 이 공백으로 구분되어 주어진다. (, , )
출력 항목의 라우터가 쓰는 연결의 수는 이하다.
출력
, 이라고 하자. 라우터는 다음과 같이 만든다.
- 입력 노드를 번호 순으로 개씩 묶어 개의 그룹으로 나눈다. 입력 노드 는 그룹 에 속한다. 마지막 그룹은 개보다 적을 수 있다.
- 출력 노드도 같은 방법으로 나눈다. 출력 노드 는 그룹 에 속한다.
- 수집 노드를 개 둔다. 그룹 의 수집 노드는 번이다.
- 분배 노드를 개 둔다. 그룹 의 분배 노드는 번이다.
- 입력 노드마다 자기 그룹의 수집 노드로 가는 연결을 만든다.
- 모든 수집 노드에서 모든 분배 노드로 가는 연결을 만든다.
- 그룹마다 그 그룹의 분배 노드에서 그 그룹의 출력 노드로 가는 연결을 만든다.
첫째 줄에 노드의 총 개수 와 연결의 수 를 공백으로 구분해 출력한다. 다음 개의 줄에는 노드 에서 노드 로 가는 연결을 한 줄에 하나씩 두 정수 , 로 출력한다. 연결은 가 증가하는 순서로, 가 같으면 가 증가하는 순서로 출력한다.