题目: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. [转载]内存的一些magic number和debug crt

    原文:http://www.360doc.com/content/13/0105/17/6295074_258392439.shtml 调试过debug版本的vc程序的人一定对0xCCCCCCCC和0 ...

  2. Sparse AutoEncoder简介

    1. AutoEncoder AutoEncoder是一种特殊的三层神经网络, 其输出等于输入:\(y^{(i)}=x^{(i)}\), 如下图所示: 亦即AutoEncoder想学到的函数为\(f_ ...

  3. 【AtCoder】AGC005 F - Many Easy Problems 排列组合+NTT

    [题目]F - Many Easy Problems [题意]给定n个点的树,定义S为大小为k的点集,则f(S)为最小的包含点集S的连通块大小,求k=1~n时的所有点集f(S)的和取模92484403 ...

  4. C++传递二维数字给一个自定义函数

    如果参数是多维数组,那么参数必须指明第一维意外得所有未得长度:比如你的 void tt(char a[][20])或者 void tt(char (*a)[20]) 另外这样也是可以的char *a[ ...

  5. 20155303 实验二 Java面向对象程序设计

    20155303 实验二 Java面向对象程序设计 目录 一.单元测试和TDD 任务一:实现百分制成绩转成"优.良.中.及格.不及格"五级制成绩的功能 任务二:以TDD的方式研究学 ...

  6. SDL封装的系统操作(转载)

    Andrew Haung bluedrum@163.com SDL封装很多操作系统的功能,为了保证SDL程序可移植性,最好尽量用这一些封装函数,哪果没有的话,才使用各种操作本地函数.  对于如何封各个 ...

  7. 那些代表性的HTTP状态码,你还只知道404吗?快来看看吧【转】

    前言 在网络上发送请求后,经常会根据请求的状态码去判断请求的成功失败与否,常见的状态码有200,404,500. 不过你以为HTTP请求的状态码就只有这么几个么?其实是远远比这个多的. 今天这篇文章我 ...

  8. C# 去除文件非法字符名

    string resultFileName = MD5Encrypt(NavigateUrl).Replace("=",string.Empty) + ".txt&quo ...

  9. 01.Web基础和HTML初始

    1.1 上网就是请求数据 我们先不直接解决这个问题,我们做一个小实验.我们每个人的电脑里面,都有一个神秘的文件夹: C:\Users\Weiheng\AppData\Local\Microsoft\W ...

  10. quartz的一个误导

    quartz文档提到,如果在集群环境下,最好将配置项org.quartz.jobStore.txIsolationLevelSerializable设置为true 问题: 这个选项在mysql下会非常 ...