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 5313 Bipartite Graph

官方题解: 首先二分图可以分成两类点XX和YY, 完全二分图的边数就是|X| \cdot |Y|∣X∣⋅∣Y∣.我们的目的是\max {|X| \cdot |Y|}max{∣X∣⋅∣Y∣...

hdu-5313 Bipartite Graph

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

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

hdu 5313 Bipartite Graph

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

HDU 5313.Bipartite Graph

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

[HDU 5354] Bipartite Graph

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5354题意: 给出n个点m条边的无向图, 要你求出哪些点满足在原图中删掉该点后是一个二分图, 输出一个...

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

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

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

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

hdu5354 Bipartite Graph

链接:http://acm.hdu.edu.cn/showproblem.php?pid=5354 题意:求删去每个点后图是否存在奇环(n,m<=1e5) 分析:看上去无从下手,这题的思路还是比较...

HDU 5354 Bipartite Graph 分治,并查集

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=5354题意:给你n个点m条边,问对于每一个点,删去它之后的图是否是二分图。(1<=n,m<=1051<=...

FZU 2141 Sub-Bipartite Graph

Description Given a simple undirected graph G with n vertices and m edges, your task is to select...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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