题目:http://acm.hdu.edu.cn/showproblem.php?pid=5313

题意:

给出n个顶点,m条边,问最多添加多少条边使之构成一个完全二分图

存储结构:

bitset     【用法详情:http://blog.csdn.net/piaocoder/article/details/47177891】

用时:624ms

思路:

二分图的总边数即:n*m(假设一个有n个点,另一个有m个点)

题目是给出总共的点数为n,间接求最大的边数

想到一个小学题:给出长度为n的绳子,将其分为两截,使以这两截长度作为长和宽的矩形面积最大,当然,就是平分喽

虽然,此题不一定和小学题一模一样,但是要想使得分出的n和m乘积最大,必须使n和m尽可能相近,没问题吧。

然后我们用一个并查集先分出各个连通图,再做相应的处理即可,详见注释

代码如下:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<bitset>
using namespace std;
const int v_N = ; //总结点数
bitset<v_N> Bit; //允许多少条边构成一个集合,比如:允许一个点构成一个集合,那么Bit[1]为真,否则为假
int n, m, group, fa[v_N], color[v_N], part_num[v_N][];
//fa:父亲; color:染色 part_num:同一个集合(并查集得到)中各个颜色所拥有的结点个数
int find(int x)
{
if (x == fa[x])
return x;
int t = fa[x];
fa[x] = find(fa[x]);
color[x] ^= color[t]; //当前与父亲异或,刷新颜色
return fa[x];
}
void solve()
{
for (int i = ; i <= n; ++i)
Bit[i] = ;
Bit[] = ;
for (int i = ; i <= n; ++i) //统计
part_num[find(i)][color[i]]++;
for (int i = ; i <= n; ++i)
if (i == fa[i]) //说明一个集合结束了,刷新Bit
Bit = (Bit << part_num[i][]) | (Bit << part_num[i][]);
int _max = ;
for (int i = n / - ; i <= n / + ; ++i) //遍历半数左右即可!! 剪枝
if (Bit[i])
_max = max(_max, i*(n - i) - m);
printf("%d\n", _max);
} int main()
{
scanf("%d", &group);
while (group--)
{
scanf("%d%d", &n, &m);
for (int i = ; i <= n; ++i)
fa[i] = i, color[i] = part_num[i][] = part_num[i][] = ;
for (int i = ; i < m; ++i)
{
int x, y, fx, fy;
scanf("%d%d", &x, &y);
fx = find(x), fy = find(y);
if (fx == fy)
continue;
fa[fx] = fy;
color[fx] = ^ color[x] ^ color[y]; //保证同一条边或不同一集合颜色不同,初始为0,所以用1异或
}
solve();
}
}

感谢您的阅读,生活愉快~

Bipartite Graph hdu 5313 bitset 并查集 二分图的更多相关文章

  1. B - Rikka with Graph HDU - 5631 (并查集+思维)

    As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some mat ...

  2. hdu 3081(二分+并查集+最大流||二分图匹配)

    Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  3. HDU 2818 (矢量并查集)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2818 题目大意:每次指定一块砖头,移动砖头所在堆到另一堆.查询指定砖头下面有几块砖头. 解题思路: ...

  4. hdu 1116 欧拉回路+并查集

    http://acm.hdu.edu.cn/showproblem.php?pid=1116 给你一些英文单词,判断所有单词能不能连成一串,类似成语接龙的意思.但是如果有多个重复的单词时,也必须满足这 ...

  5. B. Mr. Kitayuta's Colorful Graph,二维并查集,一个简单变形就可以水过了~~

    B. Mr. Kitayuta's Colorful Graph ->  Link  <- 题目链接在上面,题目比较长,就不贴出来了,不过这是道很好的题,很多方法都可以做,真心邀请去A了这 ...

  6. 2015 ACM/ICPC Asia Regional Changchun Online HDU - 5441 (离线+并查集)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5441 题意:给你n,m,k,代表n个城市,m条边,k次查询,每次查询输入一个x,然后让你一个城市对(u,v ...

  7. hdu 3536【并查集】

    hdu 3536 题意: 有N个珠子,第i个珠子初始放在第i个城市.有两种操作: T A B:把A珠子所在城市的所有珠子放到B城市.  Q A:输出A珠子所在城市编号,该城市有多少个珠子,该珠子转移了 ...

  8. HDU 1829 分组并查集

    题意:有两种性别,每组数据表示是男女朋友,判断输入的几组数据是否有同性恋 思路:http://blog.csdn.net/iaccepted/article/details/24304087 分组并查 ...

  9. HDU 1198(并查集)

    题意:给你11个图,每一个都有管道,然后给一张由这11个正方形中的n个组成的图,判断有几条连通的管道: 思路:在大一暑假的时候做过这道题,当时是当暴力来做的,正解是并查集,需要进行一下转换: 转换1: ...

随机推荐

  1. TED_Topic6:How to raise a black son in America

    By Clint Smith As kids, we all get advice from parents and teachers that seems strange, even confusi ...

  2. InnoDB 引擎独立表空间

    InnoDB 引擎独立表空间   使用过MySQL的同学,刚开始接触最多的莫过于MyISAM表引擎了,这种引擎的数据库会分别创建三个文件:表结构.表索引.表数据空间.我们可以将某个数据库目录直接迁移到 ...

  3. 20165230 2017-2018-2 《Java程序设计》第6周学习总结

    20165230 2017-2018-2 <Java程序设计>第6周学习总结 教材学习内容总结 第八章 常用使用类 String类常用方法 public int length() publ ...

  4. mysql远程连接数据库

    配置mysql允许远程连接的方法. (1)查看3306端口状态 netstat -an | grep 3306 (2)修改mysql配置文件 ubuntu系统:vim /etc/mysql/mysql ...

  5. jmeter,测登录,要不要过滤掉JS,CSS等请求?感觉过滤掉了压出来的数据就不真实?

    首先,我们来明确下你的性能测试目的,你的目的是服务端的性能还是前端的性能.这两用目的所涉及到的测试场景和工具等方法是不一样的.1.我们先来谈谈服务端的性能.一般的web产品,像css, jpeg等这种 ...

  6. .net HttpCrawler

    using HtmlAgilityPack; using System; using System.Collections.Generic; using System.Diagnostics; usi ...

  7. Angular CLI 命令行工具

    工欲善其事必先利其器.好的工具让开发更加简单便捷. 1.全局安装angular cli npm install -g @angular/cli 2.安装完成后就可以使用angular-cli命令行工具 ...

  8. Autofac Named命名和Key Service服务

    参考:http://www.cnblogs.com/wolegequ/archive/2012/06/03/2532605.html

  9. IOS使用SourceTree

    一.安装sourceTree 1.下载 访问SourceTree 软件官方下载地址 : https://www.sourcetreeapp.com 下载macos版本 2.安装 安装和windows安 ...

  10. 如何查看页面是否开启了gzip压缩

    1.谷歌浏览器 F12 2.在表头单击鼠标右键 3.如果开启了gzip则显示gzip,没有则是空