随笔分类 -  二分图

摘要:这道题又无耻的抄袭了别人的代码。刚开始以为是最大匹配,把条件不相符的人连一起,然后求最大匹配,感觉麻烦,然后看了别人的解题报告,是把相符的人连一起,然后减去,其实就是最大独立集。最大独立集=|G|-最大匹配。首先先把性别分开,因为同性不能成为couple,然后把符合条件的异性连一起,然后就是最大匹配了。#include#include#define maxn 505#define maxl 106struct Person{ int h; char music[maxl]; char sport[maxl];} male[maxn], female[maxn];int uN,... 阅读全文
posted @ 2013-08-02 15:46 yongren1zu 阅读(142) 评论(0) 推荐(0)
摘要:这道题是让求派出机器人的最少数量,乍一看以为是简单的求最小路径覆盖,后来发现错了,因为有的点可以走多次,而二分中每个点只能走一次,所以要先用floyd进行传递闭包,然后用二分#include#include#define N 505int match[N],visit[N];int n,m;int g[N][N];int DFS(int u){ int i; for(i=1;i<=n;i++) if(!visit[i]&&g[u][i]) { visit[i]=1; if(match[i]==-1||DFS(match[i])) { ... 阅读全文
posted @ 2013-08-01 15:25 yongren1zu 阅读(175) 评论(0) 推荐(0)
摘要:匈牙利算法的核心是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。学习匈牙利算法之前了解的概念,下面M是G的一个匹配。M-交错路:p是G的一条通路,如果p中的边为属于M中的边与不属于M但属于G的边交替出现,则称p是一条M-交错路。M-饱和点:对于v∈V(G),如果v与M中的某条边关联,则称v是M-饱和点,否则称v是非M-饱和点。M-可增广路:p是一条M-交错路,如果p的起点和终点都是非M-饱和点,则称p为M-可增广路。增广路的定义:若p是G中一条连通两个未匹配顶点的路径,并且是M-交错路,则称p为相对于M的一条增广路径。算法轮廓:⑴置M为空⑵找出一条增广路径P,通过异或操作获得更大的匹 阅读全文
posted @ 2013-07-31 15:53 yongren1zu 阅读(221) 评论(0) 推荐(0)
摘要:二分图:设G是一个无向图,顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点分别属于这两个顶点集,则称G为二分图匹配:给定一个二分图,在G的一个子图G'中,如果G'的边集中的任意两条边都不依附于同一个顶点,则称G'的边集为G的一个匹配。最大匹配:在所有匹配中,边数最多的那个匹配就是二分图的最大匹配。顶点覆盖:在顶点集合中,选取一部分顶点,这些顶点能够把所有的边都覆盖,这些点就是顶点覆盖集。最小顶点覆盖:在所有顶点覆盖集中,顶点数最小的那个交最小顶点集合。最小顶点覆盖等于二分图的最大匹配。独立集:在所有的顶点中选取一些顶点,这些顶点两两 阅读全文
posted @ 2013-07-30 22:26 yongren1zu 阅读(184) 评论(0) 推荐(0)