二分图点染色 BestCoder 1st Anniversary($) 1004 Bipartite Graph
- /*
- 二分图点染色:这题就是将点分成两个集合就可以了,点染色用dfs做, 剩下的点放到点少的集合里去
- 官方解答:首先二分图可以分成两类点X和Y, 完全二分图的边数就是|X|*|Y|.我们的目的是max{|X|*|Y|}, 并且|X|+|Y|=n.
- 修正:实现多连通块染色,然后贪心选择,将两个集合个数差大的连通块优先添加,能尽量使得un*vn最大
- */
- #include <cstdio>
- #include <algorithm>
- #include <cstring>
- #include <vector>
- #include <map>
- using namespace std;
- const int MAXN = 1e4 + ;
- const int MAXM = 1e5 + ;
- const int INF = 0x3f3f3f3f;
- vector<int> G[MAXN];
- int col[*MAXN];
- bool vis[MAXN];
- struct Block { //连通块
- int u, v;
- bool operator < (const Block &r) const {
- return u - v > r.u - r.v;
- }
- }b[MAXN];
- int n, m, un, vn;
- void DFS(int u, int c) {
- col[c]++; vis[u] = true;
- for (int i=; i<G[u].size (); ++i) {
- int v = G[u][i];
- if (vis[v]) continue;
- DFS (v, c ^ );
- }
- }
- int main(void) { //BestCoder 1st Anniversary($) 1004 Bipartite Graph
- //freopen ("D.in", "r", stdin);
- int T; scanf ("%d", &T);
- while (T--) {
- scanf ("%d%d", &n, &m);
- for (int i=; i<=n; ++i) G[i].clear ();
- for (int i=; i<=m; ++i) {
- int u, v; scanf ("%d%d", &u, &v);
- G[u].push_back (v); G[v].push_back (u);
- }
- int color = ;
- memset (vis, false, sizeof (vis));
- memset (col, , sizeof (col));
- for (int i=; i<=n; ++i) {
- if (vis[i]) continue;
- DFS (i, color); color += ;
- }
- int cnt = ;
- for (int i=; i<color; i+=) {
- b[++cnt].u = col[i]; b[cnt].v = col[i^];
- if (b[cnt].u < b[cnt].v) swap (b[cnt].u, b[cnt].v);
- }
- sort (b+, b++cnt);
- un = vn = ;
- for (int i=; i<=cnt; ++i) {
- if (un <= vn) {
- un += b[i].u; vn += b[i].v;
- }
- else {
- un += b[i].v; vn += b[i].u;
- }
- }
- printf ("%d\n", un * vn - m);
- }
- return ;
- }
二分图点染色 BestCoder 1st Anniversary($) 1004 Bipartite Graph的更多相关文章
- BestCoder 1st Anniversary 1004 Bipartite Graph 【二分图 + bfs + 良好的逻辑思维 】
题目地址:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=610&pid=1004 问题描述 Soda有一个$ ...
- BestCoder 1st Anniversary
Souvenir Accepts: 1078 Submissions: 2366 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 26 ...
- HDU 5313 Bipartite Graph(二分图染色+01背包水过)
Problem Description Soda has a bipartite graph with n vertices and m undirected edges. Now he wants ...
- hdu 5313 Bipartite Graph(dfs染色 或者 并查集)
Problem Description Soda has a bipartite graph with n vertices and m undirected edges. Now he wants ...
- BestCoder 1st Anniversary($) 1003 Sequence
题目传送门 /* 官方题解: 这个题看上去是一个贪心, 但是这个贪心显然是错的. 事实上这道题目很简单, 先判断1个是否可以, 然后判断2个是否可以. 之后找到最小的k(k>2), 使得(m-k ...
- hdu 5311 Hidden String (BestCoder 1st Anniversary ($))(深搜)
http://acm.hdu.edu.cn/showproblem.php?pid=5311 Hidden String Time Limit: 2000/1000 MS (Java/Others) ...
- BestCoder 1st Anniversary ——HDU5312(数学推导)
Today, Soda has learned a sequence whose n-th (n≥1) item is 3n(n−1)+1. Now he wants to know if an in ...
- HDU 5313——Bipartite Graph——————【二分图+dp+bitset优化】
Bipartite Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- [HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP)
[HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP) 题面 有三个人从一张N个点无重边的有向无环图上的三个点出发,每单位时间,他们分别选择当前 ...
随机推荐
- iOS学习之C语言循环结构
一.while循环 while (循环条件) { 循环体: } // 1.定义循环变量 int time = 1; // 2.循环条件 while ( ...
- 安装Ubuntu 15.10后要做的事
Ubuntu 15.10发布了,带来了很多新特性,同样也依然带着很多不习惯的东西,所以装完系统后还要进行一系列的优化. 1.删除libreoffice libreoffice虽然是开源的,但是Java ...
- 读取、添加、删除、修改配置文件 如(Web.config, App.config)
private Configuration config; public OperateConfig() : this(HttpContext.Current.Request.ApplicationP ...
- 从浅到深掌握Oracle的锁
1.分别模拟insert,update和delete造成阻塞的示例,并对v$lock中的相应的信息进行说明,给 出SQL演示. Insert示例 会话:SQL> select * from ...
- SpringMVC核心类DispatcherServlet
配置DispatcherServlet 要使用SpringMVC,必须在web.xml中配置好这个DispatcherServlet类 <!-- spring框架必须定义ContextLoade ...
- FushionCharts Free 的运用[2D/3D图表处理]
由于先前在一些论坛中谈论到这个插件的运用,留了一些QQ联系方式,最近老是被一些程序员“骚扰”,说是请教一些关于FushionChart Free图表的处理技术,先前还是比较乐意接受的,但发现后来一些完 ...
- Window.document对象(1)
1.Window.document对象 一.找到元素: docunment.getElementById("id"):根据id找,最多找一个: var a =docunme ...
- 计算器软件的代码实现 (策略模式+asp.net)
一 策略模式代码的编写 using System; using System.Collections.Generic; using System.Linq; using System.Web; /// ...
- Java多jdk安装
1.安装jdk 2.配置 1.安装(略) 2.配置 2.1 regedit 注册表修改,假定已经安装jdk1.6,现在更换为jdk1.7 注: 修改红色框中CurrentVersion为jdk1.7 ...
- 【UOJ Easy Round #2】
然而UER我也照样跪…… 第一题 忘了取模sad || 操作符将整个区间分成了一些段,每个手机只会执行其中某一段,执行次数为这一段中&&的个数?+1? ans=ans*num[i]+1 ...