二分图匹配
算球?
在校学生
展开
-
poj 3041 Asteroids(二分图最大匹配)
把矩阵的的每一行当作一个顶点,每一列当作一个顶点,共两组顶点。如果点(i,j)有一个障碍,就是i行和j列有交点,也就是点i和点j有一条边,用最少的点覆盖所有的边,就是结果,也就是最小点覆盖,最小点覆盖数 = 最的匹配数#include <cstdio>#include <cstring>const int MAXN = 510;int N,K;int grid[MAXN][MAXN];in原创 2017-02-04 16:07:55 · 262 阅读 · 0 评论 -
poj 2724 Purifying Machine(二分图最大匹配)
按照二进制中1的个数的奇偶性,把数字分为两个集合,即二分图的两个点集。因为1的个数奇偶性相同的,1的个数至少相差两个,不可能通过一个*来变换到。然后这两个点集中,把二进制位不同位数为1个的数字相连建边。则二分图的最大独立集就是结果。#include <stdio.h>#include <string.h>#include <vector>#include <algorithm>#includ原创 2017-10-29 20:01:38 · 321 阅读 · 0 评论 -
poj 3692 Kindergarten(最大团,二分图匹配)
题解:http://blog.csdn.net/u013081425/article/details/18503177 题目不会做,就去找题解,发现了不会的知识点,就学习了一下。最大团: 对于给定图G=(V,E)。其中,V={1,…,n}是图G的顶点集,E是图G的边集。图G的团就是一个两两之间有边的顶点集合。简单地说,团是G的一个完全子图。如果一个团不被其他任一团所包含,即它不是其他任一团的真子原创 2017-10-29 18:41:13 · 274 阅读 · 0 评论 -
poj 1466 Girls and Boys(二分图最大匹配)
总人数减去最大匹配。#include <stdio.h>#include <string.h>const int MAXN = 510;//点数的最大值const int MAXM = 50010;//边数的最大值struct Edge{ int to,next;} edge[MAXM];int head[MAXN],tot;void init(){ tot = 0;原创 2017-10-28 19:11:18 · 242 阅读 · 0 评论 -
hdu 2444 The Accomodation of Students(二分图判断,二分图最大匹配)
模板题#include <cstdio>#include <cstring>#include <queue>using std::queue;const int MAXN = 210;int g[MAXN][MAXN];int col[MAXN];int linker[MAXN];bool used[MAXN];//判断二分图bool bfs(int s, int n){原创 2017-03-13 20:17:28 · 349 阅读 · 0 评论 -
poj 1486 Sorting Slides(二分图匹配)
真是不看题解,怎么也搞不清楚题目要求什么。。先说建边还是比较好建的,判断点是否在幻灯片的范围内,在就连一条边。一直以为必须要每个页码都能匹配上幻灯片,随便匹配,只要能给页码分配个幻灯片就行,才能输出结果呢。直到wa到怀疑人生,搜了下题解,原来只要有某个页码能完全确定匹配上某一页幻灯片,输出就行了。 因为页码本来就在幻灯片上,所以最大匹配肯定是就是幻灯片个数,即完美匹配。 先求出最大匹配,判断最大原创 2017-10-28 18:10:56 · 217 阅读 · 0 评论 -
hdu 1281 棋盘游戏 (二分图最大匹配)
行匹配列,然后枚举能够放“车”的位置,看看去掉这个位置再次求得的最大匹配会不会变小#include <cstdio>#include <cstring>const int MAXN = 200;int g[MAXN][MAXN];int linker[MAXN];bool used[MAXN];int x[MAXN],y[MAXN];int n,m,k;bool dfs(int u){原创 2017-03-14 12:36:35 · 278 阅读 · 0 评论 -
hdu 1083 Courses(二分图最大匹配)
看错题目了,送了四发wa,,模板题#include <cstdio>#include <cstring>const int MAXN = 500;int g[MAXN][MAXN];int linker[MAXN];bool used[MAXN];int p,n;bool dfs(int u){ for(int v = 1;v <= n; ++v) { i原创 2017-03-14 11:23:37 · 279 阅读 · 0 评论 -
hdu 1045 Fire Net (最小点覆盖)
看完题目的第一思路是dfs搜索,但是题目分类在二分匹配里面,搜了一下发现还可以二分匹配。 建图:同一行或者同一列的点看成同一个点,除非中间有墙隔开,行和列看成两个点集,求这两个集合的最大匹配,行和列的交点就是两个点之间的边。#include <cstdio>#include <cstring>const int MAXN = 100;struct node{ int x,y;};原创 2017-03-14 10:45:16 · 401 阅读 · 0 评论 -
hdu 2063 过山车(二分图最大匹配)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 #include #include int map[505][505];int book[505];int match[505];int K,M,N;int dfs(int u){ int i; for(i = 1; i <= N; ++i原创 2016-06-07 09:12:58 · 375 阅读 · 0 评论 -
poj 2226 Muddy Fields(二分图最大匹配)
貌似和 hdu 1045 Fire Net 差不多。 按照行列划分为两个点集,对于每一行,连续的 * 为一个木板,看作一个点,给他一个编号。对于每一列,同行进行一样的操作。行的那些编号是一个点集,列的那些编号是一个点集。如果两个 * 的块有交点,则在这两点之间连边,边就相当于木板之间的交点,即泥泞地的交点。这就是个二分图了。 用最少的木板覆盖所有的泥泞地,也就是覆盖上这些交点,即二分图中的边,因原创 2017-10-30 17:55:57 · 237 阅读 · 0 评论