#P3152. 「CEOI2016」路由器

「CEOI2016」路由器

Cannot parse: undefinedms error parsing time

题目描述

译自 CEOI2016 Day2 T3「Router

Henry 和 Hetty 最近被一家来自 Piatra Neamț 的网络公司聘用。他们的第一个任务是开发一个新款路由器:革命性的 连接以太网操作接口 2016,包含:

  • NN 个输入节点,编号为 11NN
  • NN 个输出节点,编号为 N+1N+12N2N
  • KK 个内部节点,编号为 2N+12N+12N+K2N+K
  • MM 对节点之间的单向直接连接。

节点 XX 可以向节点 YY 发送数据(也可以说是 YY 可以从 XX 处获得数据),如果:

  • X=YX=Y,或者
  • 存在一个节点 ZZ,满足 XX 可以向 ZZ 发送数据,并且从 ZZYY 有一条直接连接。

如果 XX 可以向 YY 发送数据,那么我们定义从 XXYY 的一条数据链路为一些直接连接的集合 {(A1,A2),(A2,A3),,(AL1,AL)}\{(A_1,A_2),(A_2,A_3),\ldots,(A_{L-1},A_L)\},其中 L2L\ge 2,并且 A1=XA_1=X,且 AL=YA_L=Y

路由器工作正常,如果:

  • 每个输入节点都可以向每个输出节点发送数据;
  • 每个输入节点只可以从本身节点收到数据;
  • 每个输出节点只能向本身节点发送数据;
  • 对于任意两节点 XXYY,如果 XYX\neq Y,且 XX 可以向 YY 发送数据的话,YY 不能向 XX 发送数据;
  • 对于任意两节点 XXYY,如果 XYX\neq Y,且 XX 可以向 YY 发送数据的话,那么从 XXYY 的数据链路是唯一的。特别地,对于任意两个节点 XXYY,这两个节点最多被一条直接连接相连。

就像其他电子设备,路由器需要用电工作。定义操作一个节点 XX 所需的能量为 PX=INX×OUTXP_X=\text{IN}_X\times \text{OUT}_X,其中 INX\text{IN}_X 表示可以向 XX 发送数据的输入节点个数,OUTX\text{OUT}_X 是可以从 XX 接收数据的输出节点个数。定义路由器使用能量的最大值为 P_\max=\max(P_1,P_2,\ldots, P_{2N+K})

项目经理给了 Henry 和 Hetty 开发一些测试路由器的技术细节,如下表所示。对于每条限制,项目经理想要一个路由器,满足:

  • 有恰好 NN 个输入节点和 NN 个输出节点;
  • 使用最多 MlimM_{\text{lim}} 条直接连接;
  • 使用最大能量至多是 PlimP_{\text{lim}}
  • 最多总共用 5×1055\times 10^5 个节点(总节点数 Ntot=2N+K5×105N_{\text{tot}}=2N+K\le 5\times 10^5
测试数据编号 NN MlimM_{\text{lim}} PlimP_{\text{lim}} 得分
11 118118 10610^6 10610^6 44
22 223223 55
33 12501250 5×1055\times 10^5 5×1055\times 10^5 66
44 51015101
55 99349934 2626
66 99559955 10510^5 3030
77 99789978 10510^5 10510^5 2323

对于每个他们成功开发的路由器,Henry 和 Hetty 会获得一些得分,如上表所示。

输入格式

你不应该提交解决上述问题的程序。你需要先从「文件-附加文件」中下载全部输入。输入文件名称为 1-router.in7-router.in

每个输入文件都描述了一组数据。每个文件均只包含一行三个整数 N,Mlim,PlimN,M_{\text{lim}},P_{\text{lim}},意义如题目描述。

输出格式

对于每个输入文件,你需要建立对应的输出文件 1-router.out7-router.out。你可以分别提交或打包提交,格式为 zip 格式。

对于每个输出文件,首先输出两个整数 Ntot=2N+KN_\text{tot}=2N+KMM,分别表示开发路由器使用的总节点数和使用的直接连接的数量。接下来 MM 行,对于每行你应该输出两个整数 X,YX,Y,表示建立一条从 XXYY 的直接连接。

样例

对于输入:

3 100 200

第一组样例输出为:

9 8
1 7
2 7
3 8
7 8
8 4
8 9
9 5
9 6

在这组数据中,Henry 和 Hetty 必须开发一个有 33 个输入和 33 个输出节点的路由器,最多使用 100100 条直接连接,并且最大使用能量为 200200

他们总共使用了 99 个节点(输入节点 1,2,31,2,3,输出节点 4,5,64,5,6,内部节点 7,8,97,8,9)和 88 条直接连接。

路由器的最大使用能量是 99,是 88 号节点会使用的。因为这个节点可以接收 IN8=3\text{IN}_8=3 个输入节点的数据,并且给 OUT8=3\text{OUT}_8=3 个输出节点发送数据。

第二组样例输出为:

6 9
1 4
1 5
1 6
2 4
2 5
2 6
3 4
3 5
3 6

另一种相同限制下的合法的路由器设计需要使用 66 个节点(三个输入节点和三个输出节点)。

这个路由器最大使用能量是 33:每个输入节点只可以从自己接收数据,并可以向所有三个输出节点发送数据。类似地,对于每个输出节点,可以从所有三个输入节点接收数据,并只能向自己发送数据。