HDU 5313 Bipartite Graph
来源:互联网 发布:火车票网络订票时间 编辑:程序博客网 时间:2024/06/06 06:46
题目名称是二分图,但确实不是二分图!做这道题目,只需要知道什么是完全二分图就行了。
完全二分图概念(来自度娘):完全二分图是一种特殊的二分图,可以把图中的顶点分成两个集合,使得第一个集合中的所有顶点都与第二个集合中的所有顶点相连。
题目大意:已有一个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
- hdu-5313 Bipartite Graph
- hdu 5313 Bipartite Graph
- HDU 5313 Bipartite Graph
- 【染色】 HDU 5313 Bipartite Graph
- hdu 5313 Bipartite Graph 贪心+bfs染色
- 【HDU】5313 Bipartite Graph【二分图+背包】
- HDU 5313 Bipartite Graph(bitset + DP)
- [HDU 5354] Bipartite Graph
- [HDU 5313] Bipartite Graph 二分图染色+分组背包
- HDU 5313 BestCoder 1st Anniversary ($) 1004 Bipartite Graph
- hdu 5313 Bipartite Graph 完全二分图 深搜 bitset应用
- hdu 5313 Bipartite Graph(二分图染色+dp+bitset优化)
- HDU 5313 Bipartite Graph(二分图 + bitset)
- Bipartite Graph
- HDU 5313 Bipartite Graph(二分图染色+01背包水过)
- HDU 5354 Bipartite Graph[cdq+并查集]
- 【hdu 5354】Bipartite Graph【分治 并查集】
- Java 数组
- 使用Node.js的socket.io模块开发实时web程序
- hibernate第一个实例
- Android接收彩信时解析PDU的过程记录
- kinect2.0(二)读取彩色图像
- HDU 5313 Bipartite Graph
- 10.Spring MVC4.1-异步请求处理(包含兼容浏览器的服务器端推送)
- 贪吃蛇小游戏(JAVA)
- UI_触摸事件
- nyoj--18--The Triangle(dp水题)
- opencv 漫水填充运用
- Lowest Common Ancestor in a Binary Tree
- Java 对象集合数据导出到Excel
- 南京学思XSuperNest使用addHeaderView注意事项