
二分匹配
文章平均质量分 77
ehi11
这个作者很懒,什么都没留下…
展开
-
poj 2446 Chessboard 二分图最大匹配经典题
/*题意是在一些有洞的棋盘上用一个1x2的方形条将棋盘完全填满。可以对不是洞的每一个点找和他相邻的点,如果他相邻的点也不是洞的话,就画一条边。然后获取标号。实际上就是一个将一个点拆分成两个点的想法。将||可能||,可能匹配的点都连一条!!*/ #include #include #include #include using namespace std; int map[40][40];原创 2012-08-16 22:08:40 · 884 阅读 · 0 评论 -
Machine Schedule 二分图最大匹配基础题
#include #include bool map[101][101]; bool vis[101]; int match[101]; int n,m,k; bool find(int x) { for(int i=1;i<=m;i++) { if(!vis[i]&&map[x][i]) { vis[i]=true;原创 2012-08-16 22:16:12 · 691 阅读 · 0 评论 -
Don't Get Rooked 二分最大匹配经典题
/*可以把一个图拆分成两个图。一个统计行,另一个统计列。如果一行连续,则将该连续块打上一个相同的标号,否则,标号加1,该部分的处理有点麻烦。这两个图的坐标如果有相等的部分,就在此连一条边.也是点拆分的建图方法,自身条件匹配,很经典的题。*/ #include #include int r[5][5]; int c[5][5]; char map[5][5]; char op[5]; int g原创 2012-08-16 22:13:40 · 693 阅读 · 0 评论 -
Gopher II 二分最大匹配基础题
/*算鼠到洞的距离。在可能跑到的情况下连一条。在二分匹配。*/ #include #include #include bool map[501][501]; bool vis[501]; int match[501]; struct point { double x,y; }; double dis(point a,point b) { return (a.x-b.x)*(原创 2012-08-16 22:11:43 · 436 阅读 · 0 评论 -
hdu 过山车 二分匹配模板
#include #include bool map[501][501]; bool vis[501]; int match[501]; int n,m;//注意,定义在主函数里的变量在main函数里面不能再定义。否则就失效,按0来计算! bool find(int x)//寻找A可能匹配的点集合 { for(int i=1; i<=m; i++)//m为待匹配集的个数 {原创 2012-08-16 10:33:33 · 573 阅读 · 0 评论 -
T-Shirt Gumbo 二分最大匹配 hoj
/*将所有的点离散开来。避免多重匹配。*/ #include #include #include #include #include #include using namespace std; bool vis[200]; int s[200]; int cnt[200]; int match[200]; int n; vector mat[200]; int find(int x)原创 2012-08-16 19:05:27 · 649 阅读 · 0 评论 -
Guardian of Decency hoj poj 二分图匹配 不错的题
/*这个题的原意是求不能成为夫妇的人的最大数量。 但是这个只需要满足四个条件中的一个就可以连一条边,这样匹配后产生的课匹配的边数量过多, 就超时了。 可以反过来想,求不满足题意,即能成为夫妇的点数,再用总数n-此时的最大匹配数m。 因为是拆点建图,所以m/=2.最大二分匹配就转化成了最小覆盖。 另外,对500上限的点数,用邻接矩阵是0.59s。 而用vector的临接表是0.21.时间效率很客观,原创 2012-09-29 23:22:58 · 878 阅读 · 0 评论