题意:一个n×m的矩阵,m表示人,H表示房子,.表示空地,人数和房子数相等 现在要让所有的人都进入不同的房子内,人只能横着或竖着走一格,问总共最少走多少步?
解:同上,最小费用流或者标准KM;
poj 1087 A Plug for UNIX
题意:每间房间有一些插座, 每个房客有一些设备需要充电,而两者不是很配套,如果有A号插座, 而设备1 需要B号插座, 且存在A->B的适配器,那么设备一是可以充电的,且适配器可以叠加使用。同一种适配器的数量没有限制,问最多有多少个设备同时可以充电。
解:对适配器floyd,找出电器可以间接插在那个插排上,连边,求二分图最大匹配即可
ural 1721 Two Sides of the Same Coin
题意:n个命题人,有的只会写题目描述有的只会造数据,有的两者都会,现要求计算最多能组多少个小组,每个小组中有一个会写题目描述的一个会造数据的,且两人的水平相差2.
解法:首先想到如果两个人level相差2且一个会写题目描述一个会造数据则连一条边,求最大匹配,但是不能保证那些即会写题目描述又会造数据的人不被选两次,因此不能拆点后直接处理。二分匹配不拆点时序满足同一侧的点不可能有匹配,因此根据level,1 2 5 6 9 10的在一侧,3 4 7 8 11 12的在一侧,然后再按照上面的规则连边求最大匹配就可保证一个人不会被选两次 。
poj 2446 chessboard
题意:给出一个矩形N*M棋盘,有K个格子是空洞,然后用2*1的矩形,对所有非空洞的格子进行覆盖,并且任意有空洞的格子不被覆盖,如果可以全部覆盖输出“YES”否则输出"NO";
构图:每个不是空洞的格子,向周围四个不是空洞的点连边(每个格子或者和左边的格子一起被同一块木板覆盖或者被右边。。。)如果最大匹配等于非空洞格子的个数则说明有可行方案。
poj 3020 Antenna Placement与此题如出一辙
题意:一个01矩阵,要选出一些行列,使得所有值为1的点都被选出来的行列覆盖掉,并且选出来的行列最少。
建模:二分图,左面为行,右面为列。如果矩阵中i行j列有一个点,则二分图中左i右j连一条边。(即边点互换)。然后求最小点权覆盖就行了(点权就是1,不是1的得用最大流解)。
poj 2226 Muddy Fields
题意:有R×C方阵,'*'表示洼地,需要铺上宽度为1的木板,长度不限,木板只能横放或竖放.木板可以重叠,但不能覆盖'.'(草地)求覆盖所有'*'的最少木板数.
建模:某点或者被横向板子覆盖或者被竖向板子覆盖,二分图最小点覆盖,拆点构图,横向连续看为一个点集,竖向连续看为一个点集
左面:每行中最大连续的水平线段为一点;右面:每列中最大连续的竖直先点为一点。原矩阵中某个点,一定可以唯一的找到在二分图左面和在右面对应的点(十字架的交点),那么连一条线。然后同样求解最小点权覆盖就是了!
想法:和3041的思想相同之处在于:能一次覆盖的东西在二分图中作为一个点(3041为行列,2226为线段)、水平竖直分在二分图左右、某个点转化为相应的边、求解最小点全覆盖。
题意:在二维的平面中,给出一些任务,每个任务要求在指定的时间,必须有一辆taxi从起点出发,并最终到达终点,由于可能产生时间冲突,所以可能需要多辆taxi,问需要最少的taxi数量是多少。
构图:可以将每个任务看成一个点,如果两个任务的时间没有冲突,则从时间较早的任务点向时间较晚的任务点连接一条有向边,显然,这幅图的任意一条路径上的任务都可以由一辆taxi来完成,题目所求变成找出最少的路径数量,使得这些路径能覆盖图上的所有节点。
题意:
N个领导对N个员工排名(排在最前面的分数为0,表示评价最高),同时N个员工对N个领导排名,原则同上,
求 每个人平均分最少 。如存在多种可行方案按字典序逐个输出。
解法:二分图的最佳匹配,可以求出最小的平均值,对于可行性方案的求解,由于n只有25,一次可以生成圈排列然后逐一判断。。。。