题目大意:河中有一些漂浮物,每个漂浮物有一个容量。求m个人过河的最短时间。
题目思路:经典题目,加上时间限定条件,并且容量在点上,需要拆点,假设答案时间是T,那么每个点都要拆成2*T个点具体建法:S->SS为人数,SS->V无穷,UT,1->UT,2为点的容量,UT-1,2->VT,1无穷,UT-1,2->UT,1无穷,UT-1,2->T无穷效率关键是看怎么建图个方案和答案T的枚举,我用了四个方法,时间效率比较如下:sap(邻接表)按时间从小到大遍历,每次都重新建图重新增广2173MSsap(邻接表)二分时间,每次都重新建图重新增广409MSEK(邻接表)按时间从小到大,但是每次增加2*n个点后在原来的基础上增广47MSsap(邻接表)按时间从小到大,但是每次增加2*n个点后在原来的基础上增广(但是dis和gap初始化)772MS(这里sap比EK还慢,也许是因为每次推的时候dis和gap清空了(不初始化的话答案不出来),所以推的很慢,不知道有没有更好的算法)(以上思路摘自网上)
开始的时候我想到的就是拆点加二分,不敢确定,还是看了题解,看到题解有这总方法,试了一下,一直tle,于是还是只能用逐步加点的方式了,用dinic的模板过了。
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include