HDU 5313 Bipartite Graph

原创 2015年11月19日 22:05:09

题目名称是二分图,但确实不是二分图!做这道题目,只需要知道什么是完全二分图就行了。
完全二分图概念(来自度娘):完全二分图是一种特殊的二分图,可以把图中的顶点分成两个集合,使得第一个集合中的所有顶点都与第二个集合中的所有顶点相连。

题目大意:已有一个N个点,M条边的二分图,要求你增加一些边,使其成为一个完全二分图。问最多能加多少条边?不允许有重边的情况。
我们可以简单的得出一个结论:若左边L个点,右边R个点,边的条数等于L * R。
大概思路:我们只需要将点根据输入,分成两部分(可以用并查集维护)!那么可能还有一些点并没有区分出是属于哪一部分的,那么我们要考虑添加的边尽量多,那这些点应该放在哪一边?我的思考是用剩余的没有关联的点往这两个两个集合里面放,使其点的个数尽量相等。
还是简单的说明一下吧。设左边的点的个数是L,右边的点的个数的R,有L + R = N。那么要求的就是L * R的最大值,即求 L * (N - L) 的最大值 。这不就是一个求一个二次函数的最大值么?

这道题目是我以前比赛的时候做的题目,当时AC的代码实在是太丑了,今天实在是没有时间了,就不重新写了,也不贴代码,等比赛回来有时间在更新一下这篇博客就行了。

更新时间:2015.11.21

主要是觉得自己前面讲的太敷衍太简单了,想想还是更新一段吧。

前面讲到用并查集来维护,其实也不好写,因为会出现许多并不连通的情况,比如说这样的数据:
8 3
1 2
1 3
4 5

在这组数据中1 3和2在两个不同的集合里,4和5也在两个不同的集合里,而6可以再任意的集合中。我们转换下思维,可以得到这样的一些数据a1.x=1(2)和a1.y=2(1, 3),a2.x=1(4)和a2.y=1(5),k=3(6, 7, 8)。我们需要将这些数据组合一下,组成两个元素个数相差最少的集合。可以这样去组合,a1.x+a2.x+2==4。那么结果就是4*4-3==13,我们最多可以再添加13条边。其实这就是一个贪心,是吧?
怎么贪呢?这才是本题的关键。用前面的a1,a2,a3…去拼凑一个小于等于N/2,大于等于N/2-k的数。当然可以用dp,但是完全可以不这么难。想象一下,你有两个桶,若两个桶里的元素相等,ai.x和ai.y就可以随便放,不然就将ai.x和ai.y中大的那个数放进元素个数小的那个桶里,另一个则放进另一个桶里。这样就先将两个桶尽量平衡了,之后再用k分成两份,再分别放进两个桶里,使两个桶的元素个数更平衡。(其实这个贪心我并不能证明,但也没有想出反例,反正比赛的时候是过了的,可能是测试数据弱的原因吧)
然后就可以得出结果了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU 5354 Bipartite Graph 分治,并查集

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=5354题意:给你n个点m条边,问对于每一个点,删去它之后的图是否是二分图。(1...
  • dpppBR
  • dpppBR
  • 2016年08月14日 00:04
  • 525

hdu 5313 Bipartite Graph

问题描述 Soda有一个nnn个点mmm条边的二分图, 他想要通过加边使得这张图变成一个边数最多的完全二分图. 于是他想要知道他最多能够新加多少条边. 注意重边是不允许的. 输入描述 输入有多组数据....
  • u011251225
  • u011251225
  • 2015年07月29日 15:46
  • 286

【染色】 HDU 5313 Bipartite Graph

点击打开链接 给出一个二分图,求添加最多的边数 变成一个完全二分图 若两个点集个数越接近,边的数量越大 染色联通块得到k组两个点集的数量 然后用bitset搞= = #include #i...
  • u012749539
  • u012749539
  • 2015年07月26日 19:21
  • 352

【hdu 5354】Bipartite Graph【分治 并查集】

给一张无向图,问删掉点i后改图是否为二分图。 Solve(l, r)表示要求l到r的答案。在并查集中先加上l~mid的边,Solve(mid + 1, r),回溯。同理递归到Solve(l, mid)...
  • Owen_hzt
  • Owen_hzt
  • 2015年08月15日 11:17
  • 950

HDU 5354 Bipartite Graph[cdq+并查集]

这道题和2015年北大校赛第三题几乎一模一样。处理方法也是cdq+可删除并查集。 然后判断是不是二分图的方法,就是用并查集判断是否是二分图,看看我们要merge的两个点的各自与父亲相对的颜色。并查集...
  • u013007900
  • u013007900
  • 2015年08月07日 20:31
  • 884

hdu5354 Bipartite Graph

链接:http://acm.hdu.edu.cn/showproblem.php?pid=5354 题意:求删去每个点后图是否存在奇环(n,m...
  • hdu2014
  • hdu2014
  • 2015年08月12日 20:37
  • 991

Bipartite graph/network学习

Bipartite graph/network翻译过来就是:二分图。 维基百科中对二分图的介绍为:二分图是一类图(G,E),其中G是顶点的集合,E为边的集合,并且G可以分成两个不相交的集合U和V,E...
  • Edward2Jason
  • Edward2Jason
  • 2014年02月21日 15:49
  • 2767

hdu 5313 Bipartite Graph 贪心+bfs染色

题意:给出一张二分图,问最多在里面能加多少条边,保证还是二分图。 首先可以确定,在最后的二分图中,两个部分的点数差最小,则能保证所加边数最多。那么记录当前二分图两个部分分别的点数,对新的联通块加入当...
  • u014204835
  • u014204835
  • 2015年07月26日 11:24
  • 224

【HDU】5313 Bipartite Graph【二分图+背包】

传送门:【HDU】5313 Bipartite Graph复杂度:O(NN√logN32)O(\frac{N\sqrt{N}\log{N}}{32}) 方法:多重背包bitset优化my  code...
  • u013368721
  • u013368721
  • 2015年07月27日 16:13
  • 530

[HDU 5313] Bipartite Graph 二分图染色+分组背包

输入一个二分图,通过加边使得这张图变成一个边数最多的完全二分图. 问最多能够新加多少条边....
  • AcmHonor
  • AcmHonor
  • 2015年07月26日 21:48
  • 975
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 5313 Bipartite Graph
举报原因:
原因补充:

(最多只允许输入30个字)