随笔分类 -  图论——匹配

摘要:http://poj.org/problem?id=3686题意:给定n个玩具,有m个车间,给出每个玩具在每个车间的加工所需的时间mat[i][j]表示第i个玩具在第j个车间加工所需的时间,规顶只有第i个玩具在j车间完成时第j车间才能接受其他玩具来生产。求加工完毕所有的的n个玩具所需的最小的平均时间。思路:不论使用KM求最小权匹配还是使用最小费用最大流求解,建图还是最重要的。笨啊...想不到啊。。假设有n件玩具都在第j个车间生产,他们所需要的时间分别为T1 + 2*T1 + 3*T1 +..... + n*T1; 则第c个在j上的的所需时间为c*j,我们将每个车间分成n个点,表示第i个可能是第 阅读全文
posted @ 2012-11-01 23:00 E_star 阅读(294) 评论(0) 推荐(0) 编辑
摘要:http://poj.org/problem?id=1330题意:给n个点,n-1条边,一棵树,求每个询问的LCA;思路:rmq求LCA。。。。http://dongxicheng.org/structure/lca-rmq/View Code #include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#include <stack>#include < 阅读全文
posted @ 2012-09-19 22:08 E_star 阅读(244) 评论(0) 推荐(0) 编辑
摘要:http://poj.org/problem?id=3686题意:有n个订单,和m个工厂,给出data[i][j]矩阵表示第i个订单在第j工厂加工消耗的时间。同一时间内每个机器只能加工一个订单,问加工完所有订单后,使得平均加工时间最小。这里关键是拆点建图,很是难理解看老长时间;假设订单N个订单的完成时间为T1 T2 T3 ......Tn。则总的时间为T = T1*n + t2*(n - 1) + ..... + Tn*1;前边完成的时间还会影响后边订单完成的时间T1T1+T2T1 +T2 + T3......设第i个订单,把第j个机器拆成N个点,这N个点中的第k个点表示第i个订单在j机器上倒 阅读全文
posted @ 2012-07-22 21:44 E_star 阅读(242) 评论(0) 推荐(0) 编辑
摘要:http://poj.org/problem?id=2400题意:有n个管理员需要雇佣n个工作人员。 每个管理员对每个工作人员的评价不同,评价值(score)从0-n-1,0代表评价最高,n-1代表评价最低,(这样处理用KMq求解时才能出现0)同样,每个工作人员对每个管理员也有不同 的评价,评价值也是从0-n-1,0代表评价值最高,n-1代表最低。问n个管理员怎样选择n个工作人员可以使的每个人的平均评价值最小。即总的评价值 /(2*n)最小。如果存在多种最佳方案,则按照字典序输出每一种情况。思路:我们把N个管理员与N个员工分成两个点集,X,Y.管理员X[i]与员工Y[j]总的评价值为X[i]对 阅读全文
posted @ 2012-07-22 17:13 E_star 阅读(354) 评论(0) 推荐(0) 编辑
摘要:http://poj.org/problem?id=2195在一个n*m的方格里有nx人(m)和ny个房子(H),(nx = ny)人每次可以向四周移动单位距离,花费1¥,求最小花费是每个人都能进入一个房间。最小费用最大流可以做http://www.cnblogs.com/E-star/archive/2012/06/28/2567079.html这里是个二分图求最小权匹配问题,可以用KM算法求,只要把w[i][j] 化成负数,太用木板求最大的负数,然后输出-KM()就得到最小的整数了。#include <cstdio>#include <cstring>#includ 阅读全文
posted @ 2012-07-21 20:58 E_star 阅读(265) 评论(0) 推荐(0) 编辑
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2255O(n^4)模板#include <cstdio>#include <cstring>#include <iostream>#define maxn 301using namespace std;const int inf = 99999999;int w[maxn][maxn],link[maxn];int lx[maxn],ly[maxn];bool vtx[maxn],vty[maxn];int nx,ny;bool dfs(int i){ int j; vtx 阅读全文
posted @ 2012-07-21 19:19 E_star 阅读(226) 评论(0) 推荐(0) 编辑
摘要:http://poj.org/problem?id=3041将行与列转化为左右点集,只要出现Asteroids的点(i,j)就对i j建边,然后求最小点覆盖即可。。。View Code #include <cstdio>#include <cstring>#include <iostream>#define maxn 507using namespace std;int map[maxn][maxn];int link[maxn];bool vt[maxn];int n,m;bool dfs(int rpos){ int i; for (i = 1; i & 阅读全文
posted @ 2012-03-14 22:05 E_star 阅读(290) 评论(0) 推荐(0) 编辑
摘要:才开始的时候研究过他,不过当时只是记住的模板刷了几个模板题后一位会了。过上一段时间就忘了。唉。。这次好好研究研究。。http://baike.baidu.com/view/501081.htm补充:最大匹配: 图中包含边数最多的匹配称为图的最大匹配。完美匹配: 如果所有点都在匹配边上,称这个最大匹配是完美匹配。最小覆盖: 最小覆盖要求用最少的点(X集合或Y集合的都行)让每条边都至少和其中一个点关联。可以证明:最少的点(即覆盖数)=最大匹配数最小路径覆盖:用尽量少的不相交简单路径覆盖有向无环图G的所有结点。解决此类问题可以建立一个二分图模型。把所有顶点i拆成两个:X结点集中的i和Y结点集中的i& 阅读全文
posted @ 2012-02-16 14:51 E_star 阅读(457) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示