二分图

二分图匹配

北慕城南 提交于 2020-01-24 14:08:12
二分图匹配 这是一个绿与被绿的故事...... 首先二分图就是一张图能分成两个点集,集合内部没有连边,两集合之间有若干连边 现在有这么一张图 要求最多有多少对点能匹配成功 首先,我们给张起灵匹配。我们发现他只能和吴邪匹配,那好,我们给他们安排上。 现在这张图长这样(张海客:族长你不要我们了) 现在给王胖子匹配,他只爱云彩,安排上。 到苏万了。我们发现苏万是一个 花心 人缘好的人,但我们选他最想选的人也就是黑瞎子给他。 到解雨臣了。我们发现,解雨臣喜欢的黑瞎子被苏万抢了,于是解雨臣 带着自己的蝴蝶刀和解家 去和苏万商量。苏万还有喜欢的人,况且黑瞎子也不想要他,于是苏万哭着说师傅不要他了, 迫于威胁 答应了,他选了杨好,解雨臣和黑瞎子配对成功。 到霍道夫了。他的杨好又被苏万抢了。 于是苏万成了众矢之的,解家霍家追着他打 霍道夫又去和苏万商议。苏万打不过,只好选了黎簇 又被黎簇揍了一通 ,可怜的苏万。 最后,这张图长这样 很愉快,所有人都匹配成功。 二分图匹配思想就是这样。上代码 #include<iostream> #include<cstdio> using namespace std; int n,m,e,head[2000010],cnt,ans,vis[2000010],f[2000010]; struct node{ int to,next; }a[2000010];

编程算法 - 二部图确定 代码(C)

僤鯓⒐⒋嵵緔 提交于 2020-01-23 14:15:49
二部图确定 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 给定一个具有n个顶点的图. 要给图上每一个顶点染色, 而且要使相邻的顶点颜色不同. 能否最多用2种颜色进行染色. 没有重边和闭环. 即 二分图问题 . 使用 深度优先搜索(dfs) , 把顶点染成c, 然后相邻边染成-c. 假设相邻边被染色过, 且同样, 则图不是二分图; 假设全部边都被染色, 而且互不同样, 则是二分图. 进行多次搜索, 避免 非连通图 . 代码: /* * CppPrimer.cpp * * Created on: 2014.7.27 * Author: Caroline */ /*eclipse cdt*/ #include <stdio.h> #include <vector> using namespace std; class Program { static const int MAX_V = 100; /*vector<int> G[MAX_V] = {{1,3}, {0,2}, {1,3}, {0,2}}; int V = 4;*/ vector<int> G[MAX_V] = {{1,2}, {0,2}, {0,1}}; int V = 3; int color[MAX_V] = {0}; bool dfs(int v, int c

网络流(多样的建模)

筅森魡賤 提交于 2020-01-21 14:56:09
yhzq的总结是非常好的: 网络流总结 然而博主也不是一个只会复制链接的人,还是要有一点自己的感悟的 网络流问题最重要的就是建模和模型转换,下面就给出一些 经典模型 一、最大流 多源多汇问题 源有多个,汇也有多个,流可以从任意源流出,最终可以流向任意汇, 总流量等于所有源流出的总流量(所有汇流入的总流量) 解: 加一个超级源点S,和超级汇点T, 从S向每一个源点引一条有向弧,容量为 INF ,每个汇点向T引一条有向弧,容量为 INF 结点容量 每个结点都有一个允许通过的最大流量 解: 把每个结点 分裂成两个 x1,x2,中间连一条弧,容量等于x的 结点容量 无源无汇有容量下界网络的可行流 不仅无源无汇,而且每条流量既有 上界c 又有 下界b ,所有结点都应满足“入流=出流” 解: 由于我们只需要求出可行解即可, 可以增加超级源点 S ,和超级汇点 T , 然后对弧进行改造:首先添加弧 T—>S 并设容量为 无穷大 , 然后把每条下界为b的弧 拆成3条 (如图1),然后合并(如图2) 用改造后的图求最大流即可 当且仅当 所有附加弧满流 的时候原网络有可行流 有容量下界网络的s-t最大/最小流 容量同时有上下界,且有源点和汇点各一个,求s到t的最大最小流 解: 先用上题的解法求出可行流, 用传统的增广路方法 即可得到 s-t最大流 把 t看做源点 , s看做汇点 ,求出的 t-s最大流

Day 4

时间秒杀一切 提交于 2020-01-19 18:56:58
并查集 描述 并查集保持一组不相交的动态集合S={S1,S2,…,Sk}。 每个集合通过一个代表来识别。 代表就是集合中的某个成员。 哪一个成员被选做代表是无所谓的。 我们关心的是如果寻找某一动态集合的代表两次,并且在两次寻找之间不修改集合,两次得到的答案应该是相同的。 操作 初始化,查询树根,合并 应用 简单应用:统计一个无向图中连通子图的个数 对于每个V中的顶点v,Make-Set(v) 对于每个E中的边(u, v),如果Find-Set(u)!=Find-Set(v),则Union(u, v) 最后统计有几个集合即可。(统计代表的个数) 并查集实现 用有根树来表示集合 树中的每个节点都表示集合的一个成员 每棵树表示一个集合。 每个成员仅指向其父节点。 每棵树的根表示代表,且它是它自己的父节点。 思考之前的三个操作分别对应树上的什么操作? Make-Set —创建一颗仅包含一个节点的树 Find-Set —沿着父节点指针一直找下去,直到找到树根为止 Union —使得一颗树的根指向另一棵树的根。 时间复杂度 如果不优化,就在链的情况下,复杂度为O(n) 优化方法 按秩合并?? —目的是使包含较少节点的树的根指向包含较多节点的树的根。 目的是使包含较少节点的树的根指向包含较多节点的树的根。 我们并不记录以每个节点为根的子树的大小。采用一种简化分析的方法。对每个节点,用秩

二分图中及匹配的基本概念与定理

主宰稳场 提交于 2020-01-18 09:48:43
定义:设G是一个图。如果存在VG的一个划分X,Y,使得G的任何一条边的一个端点在X中,另一个端点在Y中,则称G为二分图,记作G=(X,Y,E)。如果G中X的每个顶点都与Y的每个顶点相邻,则称G为完全二分图 二分图的匹配 :给定一个二分图G,M为G边集的一个子集,如果M满足当中的任意两条边都不依附于同一个顶点,则称M是 一个匹配。 最小顶点覆盖 :在二分图中寻找一个尽量小的点集,使图中每一条边至少有一个点在该点集中。 最小顶点覆盖 == 最大匹配。   反证法证明:假设当前存在一条两个端点都不在最小顶点覆盖点集中,那么这么光芒四射的边定可以增大最大匹配边集,与最大匹配矛盾,所以得证。 最小路径覆盖 :在二分图中寻找一个尽量小的边集,使图中每一个点都是该边集中某条边的端点。 最小路径覆盖 == 顶 点数 - 最大匹配。   证明:因为一条边最多可以包含两个顶点,所以我们选边的时候让这样的边尽量多,也就是说最大匹配的边集数目咯。剩下的点就只能一个边连上一个点到集合里啦。 最大独立集 :在N个点中选出来一个最大点集,使这个点集中的任意两点之间都没有边。 最大独立集 == 顶点数 - 最大匹配。   证明:因为去掉最大匹配两端的顶点去掉以后,剩下的点肯定是独立集。我们再从每个匹配里面挑选出来一个点加入到独立集中,也是不会破坏原有独立集的独立性的。 增广路径的性质: (1)有奇数条边。 (2

【推荐系统实践-02】利用用户行为数据(协同过滤)

喜夏-厌秋 提交于 2020-01-12 05:14:19
项亮老师的《推荐系统实践》学习笔记​。​ 目录 用户行为数据简介 用户行为分析 用户活跃度和物品流行度的分布 用户活跃度和物品流行度的关系 基于邻域的算法 基于用户的协同过滤算法 基于物品的协同过滤算法 UserCF和ItemCF的比较 隐语义模型 基于图的模型 为了让推荐结果符合用户口味,我们需要深入了解用户。 基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界一般将这种类型的算法称为协同过滤算法。顾名思义,协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。 1、用户行为数据简介 用户行为数据在网站上最简单的存在形式就是日志。网站在运行过程中都产生大量原始日志(raw log),并将其存储在文件系统中。很多互联网业务会把多种原始日志按照用户行为汇总成会话日志(session log),其中每个会话表示一次用户行为和对应的服务。 会话日志通常存储在分布式数据仓库中,这些日志记录了用户的各种行为,如在电子商务网站中这些行为主要包括网页浏览、购买、点击、评分和评论等。 用户行为在个性化推荐系统中一般分两种——显性反馈行为(explicit feedback)和隐性反馈行为(implicit feedback)。显性反馈行为包括用户明确表示对物品喜好的行为

第二章 利用用户数据

天涯浪子 提交于 2020-01-06 23:21:01
文章目录 第二章 利用用户数据 2.1 用户行为数据简介 2.2 用户行为分析 2.4 基于邻域的算法 基于用户的协同过滤 基于物品的协同过滤 2.5 隐语义模型(Latent factor model) 2.6 基于图的模型 第二章 利用用户数据 基于用户行为分析的推荐算法称作 协同过滤 算法 2.1 用户行为数据简介 用户行为数据最简单的存在形式是 日志 . 用户行为按反馈的明确性分为 显性反馈行为 和 隐性反馈行为 .如果按反馈的方向还可以分为 正反馈 和 负反馈 . 一个用户行为可以用6部分表示: 产生行为的用户,行为的对象,行为的种类,产生行为的上下文,行为的内容和权重. 按照反馈的明确性分,可分为显性反馈和隐性反馈 正反馈(用户喜欢该商品)和负反馈(用户不喜欢该商品) 2.2 用户行为分析 互联网上的很多数据分布都满足 长尾分布f(x)=ax^k ,也就是少部分物品占据了大多数出现次数 用户行为数据同时也满足长尾分布的规律,即物品流行度和用户活跃度均满足长尾分布。(物品流行度指对物品产生过行为的用户总数。用户活跃度指用户产生过行为的物品总数。)用公式表达即: fi(k)为被k个用户产生过行为的物品数;fu(k)为对k个物品产生过行为的用户数。 用户越活跃,越趋向于浏览冷门的物品. 学术界对协同过滤算法进入了深入研究,提出了很多方法,比如基于邻域的方法、隐含义模型

最小路径覆盖,最小点覆盖,最大独立点集

拟墨画扇 提交于 2019-12-27 04:33:11
原文地址: http://blog.csdn.net/l04205613/article/details/6278394 node 1:最小路径覆盖 在一个PXP的有向图中,路径覆盖就是在图中找一些路经,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一次);如果不考虑图中存在回路,那么每条路径就是一个弱连通子集. 由上面可以得出: 1.一个单独的顶点是一条路径; 2.如果存在一路径p1,p2,......pk,其中p1 为起点,pk为终点,那么在覆盖图中,顶点p1,p2,......pk不再与其它的顶点之间存在有向边. 最小路径覆盖就是找出最小的路径条数,使之成为P的一个路径覆盖. 路径覆盖与二分图匹配的关系: 最小路径覆盖=|P|-最大匹配数; 其中最大匹配数的求法是把P中的每个顶点pi分成两个顶点pi'与pi'',如果在p中存在一条pi到pj的边,那么在二分图P'中就有一条连接pi'与pj''的无向边;这里pi' 就是p中pi的出边,pj''就是p中pj 的一条入边; 对于公式:最小路径覆盖=|P|-最大匹配数; 可以这么来理解: 如果匹配数为零,那么P中不存在有向边,于是显然有: 最小路径覆盖=|P|-最大匹配数=|P|-0=|P|; 即P的最小路径覆盖数为|P|;

传说中的网络流24题

牧云@^-^@ 提交于 2019-12-27 03:28:38
网络流24题,传说中学习的网络流的必做题目。今天终于做完了,感觉涉及的模型并不多,有一些我听说过的就没有涉及。但还是总结如下: 1 搭配飞行员 二分图最大匹配 最大流   建模:把正副驾驶员分别作为二分图,以在可以同机飞行的政府飞行员间建边,流量为1。建立源点s和正飞行员间的边,流量1。建立副飞行员和汇点t的有向边,流量1。dinic,最大流。 2 太空飞行计划 最大权闭合图 最小割   建模:建立源点s和汇点t,让s与所有试验相连接,边权为试验赞助的钱数;让所有仪器与t相连接,边权为仪器费用;让所有试验与对应的仪器链接,边权为inf,跑最大流就可以了。明显要么是赞助费大于仪器费,那么得到的是仪器费(赞助费-仪器费=收益);要么是仪器费大于赞助费,那么得到的是赞助费(不值得做,还是赞助费-赞助费=收益=0)。这样所有的赞助费减去得到的结果就是收益。   最大权闭合子图:http://blog.csdn.net/q610376681/article/details/52268346 3 最小路径覆盖 有向无环图最小路径覆盖 最大流   最小不相交路径覆盖:把每个点进行拆点,把2点之间连不边,;原有边依旧建边,注意入点和出点,权为1;建立源点和汇点,并分别连接他们与入点和出点的边,权为1。然后就是二分图匹配了。所有点数(不含源点和汇点)减去最大匹配就是答案。   通过上面的建图

【集训队作业】IOI 2020 集训队作业 试题泛做 2

别来无恙 提交于 2019-12-27 02:14:43
Atcoder Grand Contest 25 Problem D. Choosing Points 考虑对于给定点集 S S S 和输入 D 1 , D 2 D_1,D_2 D 1 ​ , D 2 ​ ,计算一个大小不小于 S 4 \frac{S}{4} 4 S ​ 的独立集 w o r k ( S , D 1 , D 2 ) work(S,D_1,D_2) w o r k ( S , D 1 ​ , D 2 ​ ) 。 对于 D 1 , D 2 D_1,D_2 D 1 ​ , D 2 ​ 均为奇数的情况,可以直接对点集二分图染色。 对于 D 1 , D 2 D_1,D_2 D 1 ​ , D 2 ​ 存在一个奇数的情况,不妨设为 D 1 D_1 D 1 ​ ,可以对点集二分图染色,对得到的两个新点集 A , B A,B A , B 重新计算 w o r k ( A , D 2 ) , w o r k ( B , D 2 ) work(A,D_2),work(B,D_2) w o r k ( A , D 2 ​ ) , w o r k ( B , D 2 ​ ) ,取较大者。 对于 D 1 , D 2 D_1,D_2 D 1 ​ , D 2 ​ 存在一个模 4 4 4 余 2 2 2 的数的情况,不妨设为 D 1 D_1 D 1 ​ ,则 D 1 D_1 D 1 ​