match

一般图最大匹配带花树

六月ゝ 毕业季﹏ 提交于 2019-12-24 02:51:29
参考博客:http://blog.sina.com.cn/s/blog_95ec9e7401018bga.html      https://www.cnblogs.com/owenyu/p/6858508.html 用Dinic实现的二分图匹配的时间复杂度其实是O(M*N^0.5),这也许能够解释为什么一般网络流算法比Hungry要快了。 另外,带花树算法的正确性的证明比较困难;而其时间复杂度是可以做到O(M*N^0.5)的 简述一下“带花树”算法吧: 它的核心思想还是找增广路。假设已经匹配好了一堆点,我们从一个没有匹配的节点s开始,使用BFS生成搜索树。每当发现一个节点u,如果u还没有被匹配,那么就可以进行一次成功的增广;否则,我们就把节点u和它的配偶v一同接到树上,之后把v丢进队列继续搜索。我们给每个在搜索树上的点一个类型:S或者T。当u把它的配偶v扔进队列的时候,我们把u标记为T型,v标记为S型。于是,搜索树的样子是这样的: 其中,黑色竖线相连的两个点是已经匹配好的,蓝色斜线表示两个点之间有边,但是没有配对。T型的用红色,S型的用黑色。 这里有个小问题:一个S型点d在某一步扩展的时候发现了点u,如果u已经在搜索树上了(即,出现了环),怎么办? 我们规定,如果u的类型是T型,就无视这次发现;(这意味着我们找到了一个长度为偶数的环,直接无视) 如果连出来的边是指向T型点的

HDU 4687 Boke and Tsukkomi (一般图匹配带花树)

陌路散爱 提交于 2019-12-24 02:51:19
Boke and Tsukkomi Time Limit: 3000/3000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others) Total Submission(s): 336 Accepted Submission(s): 116 Problem Description A new season of Touhou M-1 Grand Prix is approaching. Girls in Gensokyo cannot wait for participating it. Before the registration, they have to decide which combination they are going to compete as. Every girl in Gensokyo is both a boke (funny girl) and a tsukkomi (straight girl). Every candidate combination is made up of two girls, a boke and a tsukkomi. A girl may belong to zero or more candidate combinations, but one

URAL 1099. Work Scheduling (一般图匹配带花树)

纵饮孤独 提交于 2019-12-24 02:51:03
1099. Work Scheduling Time limit: 0.5 second Memory limit: 64 MB There is certain amount of night guards that are available to protect the local junkyard from possible junk robberies. These guards need to scheduled in pairs, so that each pair guards at different night. The junkyard CEO ordered you to write a program which given the guards characteristics determines the maximum amount of scheduled guards (the rest will be fired). Please note that each guard can be scheduled with only one of his colleagues and no guard can work alone. Input The first line of the input contains one number N ≤ 222

UOJ #79 一般图最大匹配

只谈情不闲聊 提交于 2019-12-24 02:49:46
一般图最大匹配 从前一个和谐的班级,所有人都是搞OI的。有 \(n\) 个是男生,有 \(0\) 个是女生。男生编号分别为 \(1,…,n\) 。 现在老师想把他们分成若干个两人小组写动态仙人掌,一个人负责搬砖另一个人负责吐槽。每个人至多属于一个小组。 有若干个这样的条件:第 \(v\) 个男生和第 \(u\) 个男生愿意组成小组。 请问这个班级里最多产生多少个小组? 输入格式 第一行两个正整数, \(n,m\) 。保证 \(n≥2\) 。 接下来 \(m\) 行,每行两个整数 \(v,u\) 表示第 \(v\) 个男生和第 \(u\) 个男生愿意组成小组。保证 \(1≤v,u≤n\) ,保证 \(v≠u\) ,保证同一个条件不会出现两次。 输出格式 第一行一个整数,表示最多产生多少个小组。 接下来一行 \(n\) 个整数,描述一组最优方案。第 \(v\) 个整数表示 \(v\) 号男生所在小组的另一个男生的编号。如果 \(v\) 号男生没有小组请输出 \(0\) 。 限制与约定 \(1≤n≤500\) , \(1≤m≤124750\) 。 是个板子,因为细节比较复杂我就不说了(其实有的自己也搞不清楚... 放个代码吧,有一些注释 Code: #include <cstdio> #include <cstring> #include <algorithm> const int N

图的最大匹配算法

*爱你&永不变心* 提交于 2019-12-24 02:48:29
定义:在一个无向图中,定义一条边覆盖的点为这条边的两个端点。找到一个边集S包含最多的边,使得这个边集覆盖到的所有顶点中的每个顶点只被一条边覆盖。S的大小叫做图的最大匹配。 二分图的最大匹配算法:设左边集合为A集合,有边集合为B集合。二分图最大匹配常用的有两种方法。 (1)第一种方法叫做匈牙利算法。这个方法依次枚举A中的每个点,试图在B集合中找到一个匹配。对于A集合中一点x,假设B集合中有一个与其相连的点y,若y暂时还没有匹配点,那么x可以和y匹配,找到;否则,设y已经匹配的点为z(显然z是A集合中的一个点),那么,我们将尝试为z找到一个除了y之外的匹配点,若找到,那么x可以和y匹配,否则x不能与y匹配。 我们以下图为例说明匈牙利匹配算法。 step1:从1开始,找到右侧的点4,发现点4没有被匹配,所以找到了1的匹配点为4 。得到如下图: step2:接下来,从2开始,试图在右边找到一个它的匹配点。我们枚举5,发现5还没有被匹配,于是找到了2的匹配点,为5.得到如下图: step3:接下来,我们找3的匹配点。我们枚举了5,发现5已经有了匹配点2。此时,我们试图找到2除了5以外的另一个匹配点,我们发现,我们可以找到7,于是2可以匹配7,所以5可以匹配给3,得到如下图: 此时,结束,我们得到最大匹配为3。 (2)第二种方法叫做Hopcroft-Karp算法

带花树算法

不羁岁月 提交于 2019-12-24 02:48:15
带花树算法 先放上大神的blog,个人认为没办法比这位dalao解释的更清楚。 带花树算法 在北京冬令营的时候,yby提到了“带花树开花”算法来解非二分图的最大匹配。 于是,我打算看看这是个什么玩意。其实之前,我已经对这个算法了解了个大概,但是。。。真的不敢去写。 有一个叫Galil Zvi的人(应该叫计算机科学家),写了篇论文: Efficient Algorithms for Finding Maximal Matching in Graphs (如果你在网上搜不到,可以: http://builtinclz.abcz8.com/art/2012/Galil%20Zvi.pdf ) 这篇论文真神啊,它解决了4个问题: (一般图+二分图)的(最大匹配+最大权匹配)问题。 算法的思想、故事,请自己看论文吧。 这个论文告诉了我们很多有趣的东西,例如: 用Dinic实现的二分图匹配的时间复杂度其实是O(M*N^0.5),这也许能够解释为什么一般网络流算法比Hungry要快了。 另外,带花树算法的正确性的证明比较困难;而其时间复杂度是可以做到O(M*N^0.5)的,不过要详细实现,那么就快能到“ACM最长论文奖”了。 我写了一个实例代码: http://builtinclz.abcz8.com/art/2012/ural1099.cpp 没错,这是用来解决URAL 1099 Work

任意图匹配 带花树模版

老子叫甜甜 提交于 2019-12-24 02:48:03
匹配就是一个图中一堆没有端点的边的集合,求最大匹配就是求这个边集最大有多少条边。 无论是任意图还是二分图,都有以下定理: 当前匹配是最大匹配当且仅当不存在增广路。 增广路的定义就是,一条包含奇数条边的路径,最前和最后的两条边都是非匹配边,且对于路径非两端的点,都连接着一条匹配边和非匹配边。 求图的匹配的算法就是不断地找增广路,把增广路上的匹配边变成非匹配边,非匹配边变成匹配边。 对于二分图来说,只要从一个没有被匹配到的点开始bfs(dfs)一下就能找到增广路(如果确实有增广路)。 但是对于任意图来说,从一个没有被匹配到的点开始bfs(dfs)不一定能找到,能不能找到取决于遍历的顺序。 于是,为了使任意图可以有匹配,带花树就出现。带花树其实就是一棵带着花的树。 任意图中搜索顺序对找增广路有影响主要是因为任意图中有奇数环,在bfs树上出现的这些奇数环就叫做花。 由于这些花不太和谐,所以要进行处理,于是就把这些花缩成一个点,然后继续bfs。 总的来说,带花树的算法就是按照二分图匹配中那样找增广路,遇到花就缩起来。 找到花要把花缩成一点,就要把整个花找出来,这里暴力找一下好了,暴力用的时间等于花上点的个数,由于找完后花就缩起来了,所以找一条增广路中缩点的总时间复杂度是不超过O(V)的。 枚举增广路的初始点是O(V),找一条增广路的时间复杂度是O(E)(邻接矩阵O(V^2))的

带花树算法学习笔记

笑着哭i 提交于 2019-12-24 02:47:49
带花树算法学习笔记 难得yyb写了一个这么正式的标题 Q:为啥要学带花树这种东西啊? A:因为我太菜了,要多学点东西才能不被吊打 Q:为啥要学带花树这种东西啊? A:因为我做自己的专题做不动了,只能先去“预习”ppl的专题了 Q:为啥要学带花树这种东西啊? A:因为可以用来做题啊,比如某WC题目 先推荐一个很皮很皮的带花树讲解: 戳这里嗷 QaQ 言归正传 带花树的算法用来解决一般图的最大匹配问题 说起来,是不是想起来网络流里面的最小路径覆盖? 或者二分图的最大匹配的问题? 的确,带花树解决一般图的最大匹配问题类似于这些东西。 但是肯定是有不同的。 比方说: 我们用匈牙利的思路来解决一般图 我们是可以很容易就让算法挂掉的 只需要一个奇环就可以啦 (让我偷张图片过来) 看见没有 有了一个奇环,在匹配的时候黑白就会翻转过来。 所以我们当然不能直接用匈牙利来做。 但是,这样的问题当然需要解决, 所以就有了带花树算法。 你可以理解为: 带花树算法=匈牙利算法+处理奇环 因为不打算长篇大论, 我按照带花树的步骤来写写这个算法。 (随时对比匈牙利算法) 匈牙利算法第一步:找到一个未被匹配的点,从这个点开始匹配 带花树算法第一步:找到一个未被匹配的点,从这个点开始匹配 貌似没有区别。。。 接下来匈牙利算法会用 \(dfs\) 来寻找增广路 带花树算法使用 \(bfs\) 将当前点丢进队列里面

Formula to match/lookup if part of a string in a cell is equal to a value in a given range and return this value

我是研究僧i 提交于 2019-12-24 01:54:36
问题 I have two text ranges in two columns in excel like that: ____________________________________________________________ | A | B | C | ------------------------------------------------------------ 1 | Mazda Mazda6 i | Escape | | 2 | Ford F150 XL | Pathfinder | | 3 | Ford Freestar SEL | Jetta | | 4 | Ford Explorer Eddie Bauer | Yaris | | 5 | Ford Escape XLT | Mazda6 | | 6 | Nissan Pathfinder LE | F150 | | 7 | Volkswagen Jetta 2.5 | Tahoe | | 8 | Toyota Yaris Base | Freestar | | 9 | Chevrolet

Excel - SUMIF INDEX and MATCH

若如初见. 提交于 2019-12-24 01:29:15
问题 I'm stuck with a sumif formula. I think if I used some mix of index and match I could get it to work but I've been unable to do so for the past hour! I need to sum from a table of numbers depending on the house number and 2 dates. For example, I need to sum the numbers for house 1 between dates 08-05-17 and 13-05-17. My previous experience with index and match is that I've only every used it to get a single specific digit. 回答1: OFFSET and INDIRECT are volatile, this is possible with INDEX