匹配
SSimpLe_Y
人一我百,人十我万,然而我做不到。
展开
-
二分匹配小结
能用二分匹配解决的问题有很多,现在在这里总结一下二分匹配里面出现的概念和这些概念与最大匹配数的关系。 记图G = (V ,E) 匹配 ----- 在G中两两没有公共端点边集合 边覆盖 ---- G中的任意顶点都至少是F中某条边的端点的边集合F 独立集 ---- 在G中两两互不相连的顶点集合 顶点覆盖 ---- G中的任意边都至少一个端点属于S的顶点集合S 例如在下图中,最大匹原创 2016-08-09 19:55:18 · 577 阅读 · 0 评论 -
二分匹配-邻接表
过山车的题,二分匹配模板 #include #include #include #include using namespace std; const int maxn = 1500;//!!! int match[maxn],book[maxn]; vector e[maxn]; int m,n; int dfs(int u) { int i; for(i=0;i<e[原创 2016-08-01 23:55:00 · 428 阅读 · 0 评论 -
HDU1045 Fire Net-二分匹配&缩点
这题的大意就是给你一个图,'X'代表墙,'.'代表空地,在空地上可以放置一个碉堡,每一行每一列只能放一个,除非它们中间有一个墙隔开,求最多能放多少个碉堡。 这题的思路就是把没被墙隔开的同一行,同一列缩成一个点,这样求出的最大匹配数就是答案。 #include #include #include #include using namespace std; const int ma原创 2016-08-02 20:05:25 · 579 阅读 · 0 评论 -
POJ 2594 Treasure Exploration-有向图最小路径覆盖&Floyd
这题大意是给你有向图,让你求出最少几个机器人可以走完所有的点,不同的机器人可以走相同的点。 如果机器人不能走相同的点,就直接求出最小路径覆盖就可以了,加上这个条件后,就要用Floyd求出所有能走的路径,再求最小路径覆盖。 最小路径覆盖 = 顶点总数 - 二分匹配数 #include #include #include #include using namespace std; con原创 2016-08-02 20:13:29 · 637 阅读 · 0 评论 -
HDU 2444 The Accomodation of Students-二分图判断&二分匹配
给你学生的数量,再给他们之间的关系,两个认识的同学能分到一个宿舍,问你是否能把这些学生分为两个集合,一个集合里的任意两个学生都互相不认识,如果可以分为两个集合,再求出有多少对学生能分到一个宿舍。 能不能分为两个集合,一个集合里的任意两个元素之间没有关系,很明显就是二分图,先判断是不是二分图,如果是二分图,再求出最大匹配数,就可以了。原创 2016-08-02 20:20:20 · 605 阅读 · 0 评论 -
HDU 1281 棋盘游戏-二分匹配
在棋盘里放尽可能多的车,让他们不能互相攻击,有一些格子不能放车,但不影响他们互相攻击。问最多能放多少个车,并且求出有多少个重要点,重要点就是如果不在这个点上放车,就不能尽可能的多放棋子。 先求出最大匹配数,然后枚举去掉每一个格子,如果得到的匹配数小于最大匹配数,重要点就多一个。原创 2016-08-02 20:38:49 · 618 阅读 · 0 评论 -
HDU4185 Oil Skimming-二分匹配
题意:连着的两个”#”可以组成一组,问你最多有几组. 把每一个#都编上号,然后在一起的两个连上边,求最大匹配数。原创 2016-08-02 20:42:19 · 611 阅读 · 0 评论 -
HDU 1054 Strategic Game-二分匹配&最小顶点覆盖
在一个无向图中,一个守卫可以防御住这个点连的所有边,让你求最少多少个守卫能防御住所有的边。 明显是个裸最小顶点覆盖。(虽然当时没出来) 最小顶点覆盖 = 最大匹配数/2(因为是无向图,所以要除以2) #include #include #include #include using namespace std; const int maxn = 1500; int match[原创 2016-08-02 20:50:20 · 657 阅读 · 0 评论 -
HDU 3829 Cat VS Dog-二分匹配&最大点集
题意:每个孩子都有一个喜欢的动物和一个讨厌的动物,若喜欢的是狗则讨厌的是猫,喜欢的是猫则讨厌狗,若一个孩子讨厌的动物被删除,喜欢的留下则他会开心,问你要怎么删除能让最多的孩子开心。 这一题建二分图是关键,对于一个孩子喜欢的动物和另一个孩子讨厌的动物相同的话,则必然这两个孩子不能同时开心,即建一条边,然后就明显了,求出最大独立集即可。 最大点集 = 总点数 - 最大匹配数/2 #inc原创 2016-08-02 20:55:08 · 852 阅读 · 0 评论 -
POJ 2289 Jamie’s Contact Groups-二分匹配&多重匹配
思路:二分匹配的多重匹配,和普通的匹配在于每个右侧集合的点可以匹配多个左侧集合的点,对于寻找增广路首先判断一个点是否匹配够上限,然后若够上限了,再枚举是否有增广路,然后此题就是二分出一个上限,然后判断二分图是否可以在这个上限内完全匹配,若可以则向左二分。原创 2016-08-02 23:11:10 · 1004 阅读 · 0 评论 -
二分匹配之最大点集
,给你一些边的关系,然后让你判断最大的点集数量是多少,就是用匈牙利匹配算出最大匹配数,然后用点的数量减去最大匹配数的二分之一,注意是二分之一 ——————————————————————hdu1068———————————————————— #include #include #include using namespace std; const int maxn = 1500; int原创 2016-05-31 21:18:24 · 447 阅读 · 0 评论