POJ 3686 & 拆点&KM】的更多相关文章

题意: 有n个订单,m个工厂,第i个订单在第j个工厂生产的时间为t[i][j],一个工厂可以生产多个订单,但一次只能生产一个订单,也就是说如果先生产a订单,那么b订单要等到a生产完以后再生产,问n个订单用这m个工厂全部生产完需要最少的时间是多少. SOL: 与平时的带权二分图不同的是这个问题相当于一个多重匹配的问题,且每个点的权值需要考虑它之前的点,其实可以比如说每个工厂搞一个set什么的维护一下然后乱搞(不知道行不行看着好像挺好). 正这考虑不是很方便于是我们可以反着来,最后被生产的点只需要它…
题目链接:http://poj.org/problem?id=3686 思路:显然工件为X集,机器为Y集合.由于每个机器一次只能加工一个部件,因此我们可以将一台机器拆成N个点,至于部件与机器之间连多大的边权呢?假设N个部件都是有某台机器先后完成的,设加工每个部件的时间分别为t1,t2,t3,...,tn,那么总时间为t1*n+t2*(n-1)+t3*(n-2)+...+tn.于是我们可以对于X中的i,Y中的原机器j对应的拆点后的点(p-1)*i+j(其中1<=p<=n)连边p*k.然后就是KM…
The Windy's Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5362   Accepted: 2249 Description The Windy's is a world famous toy factory that owns M top-class workshop to make toys. This year the manager receives N orders for toys. The ma…
题目链接 The Windy's | Time Limit: 5000MS | Memory Limit: 65536K | | Total Submissions: 4939 | Accepted: 2080 | Description The Windy's is a world famous toy factory that owns M top-class workshop to make toys. This year the manager receives N orders for…
The Windy's Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4158   Accepted: 1777 Description The Windy's is a world famous toy factory that owns M top-class workshop to make toys. This year the manager receivesN orders for toys. The man…
题目链接:http://poj.org/problem?id=2516 题目大意: 第一行是N,M,K 接下来N行:第i行有K个数字表示第i个卖场对K种商品的需求情况 接下来M行:第j行有K个数字表示第j个库房对K种商品的存货情况 接下来K个N*M的矩阵: 每个矩阵(i,j)表示第k种商品从第j个库房运到第i个卖场的运费(单价) 求满足所有需求的最小花费,如果不能全部满足输出-1. 解题思路: 拆点,对于第k种商品有: 把每个卖场的需求按件数拆成各个小点(比如需要x件就看做x个点) 把每个库房的…
题意:n个订单和m个生产车间,每个订单在不同的车间生产所需要的时间不一样,并且每个订单只能在同一个车间中完成,直到这个车间完成这个订单就可以生产下一个订单.现在需要求完成n个订单的平均时间最少是多少.(每个订单的单独时间之和/n,包括等待时间). 主要是建图,考虑第i个订单在第j个车间倒数第k个被生产,那么第i个订单在第j个区间所花费的时间为k*mat[i][j]. 每个区间最多生产n个订单,那么就可以把n*m的图转化成n*(n*m)的图进而用km算法求最小权值. 所以把每个权值取反进而求最大权…
[题目链接] http://poj.org/problem?id=3686 [题目大意] 每个工厂对于每种玩具的加工时间都是不同的, 并且在加工完一种玩具之后才能加工另一种,现在求加工完每种玩具的平均时间 [题解] 因为每个工厂加工一个零件在不同的时间是有不同代价的, 我们发现对于一个工厂在每次加工一个零件时候,时间要加上之前所有的零件的时间的条件 其实等价于对这个工厂加工的零件乘上1~N的不同系数. 那么我们将这个工厂对于时间进行拆点,对于费用乘上不同的系数,求一遍费用流即可 [代码] #in…
http://poj.org/problem?id=3686 #include <cstdio> #include <cstring> #include <algorithm> #define maxn 30000 using namespace std; <<; ][maxn],lx[maxn],ly[maxn],match[maxn],a[][]; bool sx[maxn],sy[maxn]; int n,m; bool path(int u) { s…
题目链接:http://poj.org/problem?id=2516 思路:考虑某种货物,由于某个订货商可能接受来自不同地区的货物,而某一地区的货物也可能送给不同的订货商,显然不能直接进行匹配,必须拆点,设某个订货商的订货量为k,就应该把该订货商拆成k个点,这样就能最多接受k个地区的货物供应,同理,地区也应该拆成它的存储量个点.然后就是最小权匹配了(这里要进行K次). http://paste.ubuntu.com/5953296/…