POJ-3686 The Windy's KM算法 拆点题
标签:debug src 思路 pair 分享 second efi 括号 back
参考:https://blog.csdn.net/sr_19930829/article/details/40680053
题意:
有n个订单,m个工厂,第i个订单在第j个工厂生产的时间为t[i][j],同一个工厂可以生产多个订单,但一次只能生产一个订单,也就是说如果先生产a订单,那么b订单要等到a生产完以后再生产,问n个订单用这m个工厂全部生产完需要最少的时间是多少。
思路:
这道题好像用费用流也可以,建图思路好像也是一样的。每个订单耗费时间和在工厂中的等待顺序是有关系的。显然,如果一个工厂有k个订单,那么第一个商品 t1时间,第二个商品就是(t1 + t2)时间,第三个商品就是(t1+t2+t3)...因为我们考虑的是总时间,加起来 = t1 + (t1 + t2) + (t1 + t2 + t3) ... (t1 + t2 ... tk) 。去括号可以发现 K*t1 + (K-1) * t2 + ...tk。但这里你可能还像我一样不知所措。t1 贡献了 K 倍,t2 贡献了(K-1)倍,tk贡献了一倍。说得更清楚一些,某个工厂的倒数第 i 个订单贡献 i * t 的时间。所以我们要给每个工厂开n个点,这个点表示左边某个物品在第(1~n)个时的贡献。就是拆点的思想,每个工厂拆出n种情况。
图片可能更好理解(复制自参考)
#include
#include
#include
#include
#include
#include
#include
#include string>
#include
#include
#include
#include
#include
#include
#include
POJ3686
POJ-3686 The Windy's KM算法 拆点题
标签:debug src 思路 pair 分享 second efi 括号 back
原文地址:https://www.cnblogs.com/ckxkexing/p/9545148.html
评论