라우터 3
시간 제한2초메모리 제한512 MB
입력과 출력을 각각 g개의 그룹으로 나누고, 2Ng개의 방향 간선을 출력해 라우터를 구성하는 문제입니다.
문제
헨리와 헤티는 네트워크 장비 회사에 입사해 새 라우터를 설계한다. 라우터의 구성은 다음과 같다.
- 입력 노드 개, 번호는 번부터 번까지
- 출력 노드 개, 번호는 번부터 번까지
- 내부 노드 개, 번호는 번부터 번까지
- 서로 다른 두 노드를 잇는 단방향 직접 연결 개
노드 가 노드 로 데이터를 보낼 수 있다는 말은 (가 에게서 데이터를 받을 수 있다는 말과 같다) 다음 중 하나가 성립한다는 뜻이다.
- 이다.
- 가 데이터를 보낼 수 있는 노드 가 있고, 에서 로 가는 직접 연결이 있다.
이고 가 로 데이터를 보낼 수 있으면, 에서 로 가는 데이터 경로는 이고 인 직접 연결의 집합 이다. 여기서 이다.
라우터가 제대로 동작하려면 다음 조건을 모두 만족해야 한다.
- 모든 입력 노드는 모든 출력 노드로 데이터를 보낼 수 있다.
- 입력 노드는 자기 자신에게서만 데이터를 받는다.
- 출력 노드는 자기 자신에게만 데이터를 보낸다.
- 인 두 노드에서 가 로 데이터를 보낼 수 있으면, 는 로 데이터를 보낼 수 없다.
- 인 두 노드에서 가 로 데이터를 보낼 수 있으면, 에서 로 가는 데이터 경로는 하나뿐이다. 특히 두 노드를 잇는 직접 연결은 많아야 하나이다.
노드 를 켜 두는 데 드는 전력은 이다. 는 로 데이터를 보낼 수 있는 입력 노드의 수이고, 는 에게서 데이터를 받을 수 있는 출력 노드의 수이다. 라우터가 쓰는 최대 전력은 이다.
입력 노드와 출력 노드가 각각 개이고, 직접 연결을 개 이하로 쓰고, 최대 전력이 이하이며, 전체 노드 수가 인 라우터를 만들어라.
조건을 만족하는 라우터는 여러 가지이므로, 출력 형식에서 정한 3층 구성 규칙으로 만든 라우터 하나만 정답으로 인정한다.
입력
첫째 줄에 정수 세 개 , , 이 공백으로 구분되어 주어진다. 은 입력 노드의 수이자 출력 노드의 수, 은 쓸 수 있는 직접 연결의 최대 개수, 은 라우터가 쓸 수 있는 최대 전력이다.
, , 이다.
을 만족하는 가장 작은 양의 정수를 라고 할 때, 이고 임이 보장된다.
이 라우터의 설계 사양은 , , 이고, 더 작은 사양도 입력으로 주어진다.
출력
라우터를 다음 규칙대로 만든다.
- 을 만족하는 가장 작은 양의 정수를 라고 하자.
- 일 때 입력 노드 는 입력 그룹 에 속하고, 출력 노드 는 출력 그룹 에 속한다.
- 인 순서쌍 마다 내부 노드를 하나씩 만들고 번호 를 붙인다. 따라서 이고 이다.
- 모든 입력 노드 에서 모든 에 대해 내부 노드 로 직접 연결을 놓고, 모든 내부 노드 에서 그룹 에 속한 모든 출력 노드로 직접 연결을 놓는다. 따라서 이다.
첫째 줄에 과 을 공백으로 구분해 출력한다. 이어지는 개의 줄에는 직접 연결을 한 줄에 하나씩, 에서 로 가는 연결을 정수 와 로 출력한다. 연결을 출력하는 순서는 다음과 같다.
- 먼저 입력 노드에서 나가는 연결을 가 증가하는 순서로 출력하고, 가 같으면 가 증가하는 순서로 출력한다.
- 그다음 내부 노드에서 나가는 연결을 내부 노드 번호가 증가하는 순서로 출력하고, 같은 내부 노드 안에서는 출력 노드 번호가 증가하는 순서로 출력한다.
이렇게 만든 라우터는 제대로 동작하고, 최대 전력은 이다.