题目描述
众所周知,小葱同学擅长计算,尤其擅长计算组合数,但这题不仅和组合数没什么关系,甚至和小葱也没有关系。
这次我们的主人公是小何同学。众所周知,小何同学非常有钱,他买了
虽然小何同学特别有钱,但是小何同学没有多少的时间毕竟他还要去陪妹子,所以现在小何同学希望你来帮他决定每个 A+B 问题分配到哪台机器上计算,使得所有 TPU 的计算时间总和最小或者所有任务完成的时间最小。所谓 TPU 的计算时间,其定义为 TPU 用来计算问题的时间加上所有数据传输的时间之和。所有任务完成时间定义为从第一个计算开始到最后一个计算结束的时间。
虽然小何同学特别有钱,并且小何同学知道你也没有多少时间来做这个题,所以小何同学为了简化问题,对上述任务作出了如下规定:
- 问题的依赖关系之间没有环。
- 任何一个时刻,一台 TPU 只能计算一个问题,且一旦开始这个问题的计算,就不会被打断,会一直计算到这个问题计算完成。
- 如果一台 TPU 此时没有计算任何一个问题,并且存在一个或多个问题已经准备好数据可以计算,那么 TPU 会选择其中编号最小的问题开始计算。
- 一台 TPU 同时进行多个数据传输,且彼此之间互相不会影响速度,计算问题的同时也可以进行数据传输,且彼此之间的速度都不会受到影响。
- 数据不能进行转发,只能直接在相应的机器之间传输。
- 保证
。 - 如果一个任务不依赖于其他任务,则该任务所需要的数据已经直接在对应机器上准备好了不需要传输。
在上面的这些条件下,小何同学认为这个问题已经足够简单了,于是他愉快地去找妹子玩耍,并把这个问题交给了你。
输入格式
这是一道提交答案题,共有 placement1.in
~ placement10.in
。
第一行四个整数
接下来
接下来
接下来
输出格式
对于每组输入数据,你需要提交相应的输出文件 placement1.out
~ placement10.out
。
一行
样例
样例输入
3 3 3 1
1 2
2 3
1 3
1 2 3
2 3 1
3 1 2
0 2 1
2 0 3
1 3 0
样例输出
1 3 2
数据规模与约定
本题的每个测试点有十个评分标准,如果你的答案小于等于其中
这些标准保存在选手目录的 placement.ans*
中。
提示
为了方便你测试自己的答案,小何同学把妹子甩了然后给你写了一个模拟器。你可以在你的目录下找到一个可执行文件 simulator
。它的用法为在终端中执行 ./simulator <input_file> <output_file>
。其中 <input_file>
为输入文件,<output_file>
为你的答案。它会告诉你你的分配方案的总计算时间和所有任务的完成时间。
注意:由于陪妹子玩耍降低了小何同学的编程技巧,小何同学不能保证这个模拟器能对不是他提供的输入文件给出正确的结果。
注意,这个 simulator
来自现场赛,仅保证在 Ubuntu 14.04/NOI Linux 1.4.1 和 Ubuntu 16.04 下能够运行。
每个答案文件的大小不能超过 10kB (事实上,合法的解的大小一定小于这个限制)。