二分匹配
文章平均质量分 77
ehi11
这个作者很懒,什么都没留下…
展开
-
poj 2446 Chessboard 二分图最大匹配经典题
/*题意是在一些有洞的棋盘上用一个1x2的方形条将棋盘完全填满。可以对不是洞的每一个点找和他相邻的点,如果他相邻的点也不是洞的话,就画一条边。然后获取标号。实际上就是一个将一个点拆分成两个点的想法。将||可能||,可能匹配的点都连一条!!*/#include #include #include #include using namespace std;int map[40][40];原创 2012-08-16 22:08:40 · 858 阅读 · 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 · 672 阅读 · 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 · 672 阅读 · 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 · 419 阅读 · 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 · 557 阅读 · 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 · 633 阅读 · 0 评论 -
Guardian of Decency hoj poj 二分图匹配 不错的题
/*这个题的原意是求不能成为夫妇的人的最大数量。但是这个只需要满足四个条件中的一个就可以连一条边,这样匹配后产生的课匹配的边数量过多,就超时了。可以反过来想,求不满足题意,即能成为夫妇的点数,再用总数n-此时的最大匹配数m。因为是拆点建图,所以m/=2.最大二分匹配就转化成了最小覆盖。另外,对500上限的点数,用邻接矩阵是0.59s。而用vector的临接表是0.21.时间效率很客观,原创 2012-09-29 23:22:58 · 860 阅读 · 0 评论