随笔分类 -  二分图

二分图相关概念
摘要:二分图:是这样一个图,其顶点可分为两集合X和Y,所有的边关联的两顶点中,恰一个属于X,另一个属于Y。同一集合的结点不相邻。匹配:图的一个匹配是一些边的集合,任意两条边没有公共点。最大匹配:包含边数最多的匹配。 匈牙利算法完美匹配:所有点都在匹配边上的匹配。完备匹配:在二分图中,X中的所有点都有对应的匹配或者是Y集中所有的点都有对应的匹配。最佳匹配:如果G为加权二分图,则权值和最大的完备匹配称为最佳匹配。KM算法最小覆盖:用最少的点(X集合或Y集合的)让每条边都至少和其中一个点关联。即覆盖边。最少点数(即覆盖数)=最大匹配数最小路径覆盖:用尽量少的不相交简单路径覆盖有向无环图G的所有结点。即覆盖 阅读全文

posted @ 2012-07-14 11:00 more think, more gains 阅读(240) 评论(0) 推荐(0)

poj 3020 最小路径覆盖
摘要:题意:N * M的矩阵,*代表城市, o代表空地,有四种信号覆盖设备,每种类型信号设备可以覆盖相临得一个点。问要把所有城市覆盖所需最少得设备数?算法:1.构图 关键是怎么构图,如果像poj3041那样以X,Y轴行列号为两个不同得集合,明显行不同,看下答案输出那么大就知道,于是我猜想是否可以用城市构图, 给城市标号,并且把标号分拆为2个点(vi,vi'), vi为X集合,vi'为Y集合。。然后我发现求出来得二分匹配答案很大,明显又不对。。而且这里应该是用最少的边覆盖所有点。。。当时不知到有最小路径公式,看了解体报告才知道。发现自己瞎猜得建图正确了。无向图最小路径 = N - 最大 阅读全文

posted @ 2012-07-14 10:45 more think, more gains 阅读(203) 评论(0) 推荐(0)

poj 3041 匈牙利算法 最小点覆盖
摘要:题意:一个N * N的矩阵,每个格子有些行星,有种特殊武器,一次能消灭一行,或一列,问最少使用多少次这样得武器,可以消灭所有行星。构图:刚开始的思路是最少的边覆盖所有点,这个边是要么平行X轴,要么平行Y轴。显然这样,这个边无法构图,起点终点都不知。转换思路, 既然平行X轴,Y轴的边无法构造,是否可以平行X轴或Y轴的边把它看作一个点呢?同时分成两个集合,一个集合X(1-N),一个集合Y(1-N),一个点(a,b)就从X集合中的点A连一条边指向集合Y中的B。这样的定义构图就完全符合二分图的定义。二分图的定义:1.可以分成两个集合,一个X,一个Y2.任何一条边的两个端点都分属于不同集合3.任何一个集 阅读全文

posted @ 2012-07-14 08:22 more think, more gains 阅读(204) 评论(0) 推荐(0)

二分图KM算法 HDU 2255
摘要:在百度百科学了KM算法。。km算法是求完备匹配下的最大权KM算法流程:1.对二分图的两部分顶点初始化2.KM算法用匈牙利算法寻找完备匹配3.如果未找到就修改相应顶点值4重复(2)(3)直到找到相等子图的完备匹配为止;HDU 2255是裸题。。未优化版:View Code #include<stdio.h>#include<string.h>#include<stdlib.h>int match[1000];int mp[400][400];bool visitx[400], visity[400];int xx[400], yy[400];const int 阅读全文

posted @ 2012-03-08 14:11 more think, more gains 阅读(299) 评论(0) 推荐(0)

简单二分图匹配
摘要:1.HDU 2063 过山车模板题。。View Code #include <stdio.h>#include <string.h>#include <stdlib.h>#include <algorithm>#include <queue>#include <deque>#include <list>#include <map>#include <set>#include <stdlib.h>#include <time.h>using namespace st 阅读全文

posted @ 2012-03-07 22:14 more think, more gains 阅读(193) 评论(0) 推荐(0)

导航