주어진 연결 수와 전력 한도 안에서 N개의 입력을 N개의 출력에 연결하는 수집기, 허브, 분배기 계층 구조의 라우터를 구성합니다.
보통6그래프구현수학아직 제출이 없습니다시간 제한2초메모리 제한512 MB헨리와 헤티는 네트워크 회사에 입사했고, 첫 프로젝트로 라우터 Connect Ethernet Operating Interface 2016을 만든다. 라우터는 다음으로 구성된다.
노드 X가 노드 Y로 데이터를 보낼 수 있다는 말은 Y가 X에서 데이터를 받을 수 있다는 말과 같고, 다음 중 하나가 성립한다는 뜻이다. X=Y이거나, X가 데이터를 보낼 수 있는 노드 Z가 있고 Z에서 Y로 가는 직접 연결이 있다.
X가 Y로 데이터를 보낼 수 있고 X=Y일 때, X에서 Y로 가는 데이터 경로는 L≥2, A1=X, AL=Y를 만족하는 직접 연결의 집합 {(A1,A2),(A2,A3),…,(AL−1,AL)}이다.
라우터는 다음 다섯 조건을 모두 만족할 때 제대로 동작한다.
노드 X를 돌리는 데 드는 전력은 PX=INX×OUTX이다. INX는 X로 데이터를 보낼 수 있는 입력 노드의 개수, OUTX는 X에서 데이터를 받을 수 있는 출력 노드의 개수다. 라우터가 쓰는 최대 전력은 Pmax=max(P1,P2,…,P2N+K)다.
제대로 동작하는 라우터를 만들어라. 입력 노드와 출력 노드가 각각 정확히 N개여야 하고, 직접 연결은 Mlim개 이하여야 하며, Pmax≤Plim이어야 하고, 전체 노드 수는 Ntot=2N+K≤500000이어야 한다.
이 조건을 만족하는 라우터는 여러 개여서 출력 항목에서 그중 하나를 정해 두었다. 그 라우터를 출력하면 된다.
한 줄에 정수 N, Mlim, Plim이 주어진다. 차례대로 입력 노드의 개수, 허용되는 직접 연결의 최대 개수, 허용되는 최대 전력이다. 출력 노드의 개수도 N과 같다.
1≤N≤10000, 1≤Mlim≤500000, N≤Plim≤1000000이다. 모든 입력 노드 X는 INX=1, OUTX=N이므로 답이 존재하려면 Plim≥N이어야 한다.
모든 테스트 데이터에서 출력 항목이 정한 라우터의 직접 연결 개수는 Mlim개 이하다.
아래 규칙으로 만든 라우터를 출력한다. 이 라우터는 제대로 동작하고 최대 전력이 Plim 이하다.
먼저
g=min(N,⌊NPlim⌋),c=⌊Plim⌋,b=⌊gc⌋
로 둔다.
입력 노드를 연속한 g개씩 묶어 S=⌈N/g⌉개의 그룹으로 자른다. 입력 그룹 j는 입력 노드 (j−1)g+1번부터 min(jg,N)번까지를 담으므로 마지막 그룹은 다른 그룹보다 작을 수 있다. 출력 노드도 같은 방식으로 자른다. 출력 그룹 j는 출력 노드 N+(j−1)g+1번부터 N+min(jg,N)번까지를 담는다.
그룹 번호 1부터 S까지를 연속한 b개씩 묶어 B=⌈S/b⌉개의 블록으로 자른다. 블록 k는 그룹 번호 (k−1)b+1부터 min(kb,S)까지를 담고, 그룹 j는 블록 ⌊(j−1)/b⌋+1에 속한다. 입력 쪽과 출력 쪽은 같은 블록 구분을 쓴다.
내부 노드는 K=2S+B2개이고 다음 순서로 번호를 붙인다.
직접 연결은 다음 순서로 출력한다.
이 라우터는 Ntot=2N+2S+B2, M=2N+2SB다.
첫째 줄에 Ntot과 M을 공백으로 구분해 출력한다. 다음 M개의 줄에는 직접 연결 하나마다 두 정수 X와 Y를 공백으로 구분해 출력한다. 노드 X에서 노드 Y로 가는 직접 연결을 뜻하고, 순서는 위에서 정한 대로다.