N개의 입력, r개의 병합 노드, r개의 분할 노드, N개의 출력으로 이루어진 고정 라우터를 M = 2N + r^2개의 연결로 출력한다.
쉬움2구현시뮬레이션아직 제출이 없습니다시간 제한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, Plim을 건네면서 입력 노드와 출력 노드가 정확히 N개씩이고, 직접 연결을 많아야 Mlim개 쓰고, Pmax가 Plim 이하이며, 전체 노드가 500000개 이하(Ntot=2N+K≤500000)인 라우터를 요구한다. 관리자가 실제로 건넨 명세는 N=5101, Mlim=500000, Plim=500000이다.
명세 하나를 만족하는 라우터는 여러 가지다. 그래서 이 문제에서는 출력에 적힌 라우터 하나만 만든다.
첫째 줄에 정수 N, Mlim, Plim이 주어진다. N은 입력 노드의 개수이자 출력 노드의 개수, Mlim은 쓸 수 있는 직접 연결의 최대 개수, Plim은 허용되는 최대 전력이다.
출력에서 정의한 g=min(N,⌊Plim/N⌋)과 r=⌈N/g⌉에 대해 2N+r2≤Mlim과 2N+2r≤500000이 항상 성립한다.
아래에 적힌 라우터를 그대로 만든다. g=min(N,⌊Plim/N⌋), r=⌈N/g⌉이라고 하자.
내부 노드는 K=2r개이므로 Ntot=2N+2r이다. 2N+1번부터 2N+r번까지는 모음 노드, 2N+r+1번부터 2N+2r번까지는 분배 노드다. 입력 노드 i는 입력 그룹 ⌈i/g⌉에 속하고, 출력 노드 N+t는 출력 그룹 ⌈t/g⌉에 속한다. 한 그룹의 크기는 많아야 g다.
직접 연결은 M=2N+r2개다.
첫째 줄에 Ntot과 M을 공백 하나로 구분해 출력한다. 다음 M개의 줄에는 연결을 한 줄에 하나씩 출력하는데, 노드 X에서 노드 Y로 가는 직접 연결이 있다는 뜻으로 정수 X와 Y를 출력한다. 순서는 i가 커지는 순의 입력 연결, 그다음 j가 커지는 순이고 j가 같으면 k가 커지는 순의 내부 연결, 마지막으로 t가 커지는 순의 출력 연결이다.