【2017.10.23】NOIP赛前集训 | T1 最小生成树【并不】
T1 最小生成树
【问题描述】
话说CD重回课室上课以后,就发现了一个非常严重的问题:作业非常多!具体来说,一共有n项作业,老师说了,第i项作业要在时间di之前完成,正常地来说,CD完成第i项作业需要bi的时间。然而,众所周知,对于CD来说,喝奶茶是一件可以提高工作效率、振奋人心的事情,但是奶茶对于不同的作业功效都是不同的,你可以认为,CD在做第i项作业期间,每喝1ml的奶茶,他完成第i项作业所需要的时间就会减少ai,当然,奶茶还不至于神奇到有时光倒流的功能。
现在,CD想知道,他要按时完成所有作业最少要喝的奶茶。
【数据描述】
对于20%的数据,n≤10,对于所有i满足di≤100且ai=1。
对于40%的数据,n≤3000。
对于100%的数据,1≤n≤200000,ai,bi,di≤106。
【解析】
首先,不要被题目骗了,这道题跟最小生成树半毛钱关系都没有!!!
先分析题目。
我们可以知道之前已做的作业的做的顺序对现在正在做的这一项作业是没有影响的,这是显而易见的。那么我们可以按照各项作业截止的时间从小到大来做①。做到这一项作业时,如果已经用的时间 time 超过了这项作业的截止时间,那么就说明我们在做之前的某项作业时需要喝奶茶②。至于到底在做哪一项作业时需要喝奶茶哪?题目要求的是按时完成所有作业最少要喝的奶茶,所以在前面已做的作业中找一个ai最大的喝来奶茶,这样能使我们喝的奶茶尽量地少。
①只要加个cmpSORT一下就好了,问题出在②上。
——20%
因为 ai 都是相同的,所以在已做的作业里面随便找个来做就好。
——40%
每一次都扫一遍前面的作业,找一个 ai最大的 maxn。
——100%
堆, 重载一下 < 即可。做完一项作业就把它扔堆里。

浙公网安备 33010602011771号