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分成两份,再分别放进两个桶里,使两个桶的元素个数更平衡。(其实这个贪心我并不能证明,但也没有想出反例,反正比赛的时候是过了的,可能是测试数据弱的原因吧)
然后就可以得出结果了。

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

相关文章推荐

POJ3164 最小树形图 有向图的最小生成树 模板题 朱刘算法 朱永津-刘振宏算法

算法思想: 0. 若从根开始走有哪个点无法走到则没有最小树形图,甚至树形图都没有。 1. 对每个点求一个边权最小的前驱(求最小弧),并且对这些最小弧建新图(思想上建图) 2. 在新图上对每个环缩点,然...
  • Vmurder
  • Vmurder
  • 2014年08月25日 13:50
  • 1741

概率--论文

LightOJ-1248-Dice (III) (数学期望) 给出一个n个面的骰子,问掷出所有面的期望...

hdu-5313 Bipartite Graph

题意: 给出一个完全二分图中的一些边,求这个完全二分图中最多还有多少条边; 点数 题解: BC的pre test太坑爹了! 显然如果想让边数最多,两边的点数越均衡越好; 考虑到给出...

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

输入一个二分图,通过加边使得这张图变成一个边数最多的完全二分图. 问最多能够新加多少条边....

hdu 5313 Bipartite Graph(二分图染色+dp+bitset优化)

题目链接: 点击打开链接 题目大意: 给出一张二分图,问这张二分图还能最多加多少条边? 题目分析: 这道题的思路是这样的: 1.首先对于一张二分图,我们有两个点集,两点之间存在边的一定在不...

hdu5313 Bipartite Graph(二分图染色+dp+位运算)

题意描述: 有一个n个点m条边的二分图,通过加边使得这张图变成一个边数最多的完全二分图. 最多能够新加多少条边. 注意重边是不允许的. 解题思路: 1、先对二分图染色(dfs),统计二分图中每个连...

HDU 5313.Bipartite Graph

首先二分图可以分成两类点X和Y, 完全二分图的边数就是|X| * |Y|,我们的目的是max {|X| *|Y|},并且|X| + |Y| = n,开口向下的抛物线,只要求出 X-Y的最小值#inc...

hdu 5313 Bipartite Graph

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

hdu5354 Bipartite Graph

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

[HDU 5354] Bipartite Graph

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5354题意: 给出n个点m条边的无向图, 要你求出哪些点满足在原图中删掉该点后是一个二分图, 输出一个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 5313 Bipartite Graph
举报原因:
原因补充:

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