原文链接https://www.cnblogs.com/zhouzhendong/p/9224878.html

题目传送门 - ARC099 E - Independence

题意

  给定一个有 $n$ 个节点, $m$ 条边的无向图,保证没有自环和重边。

  请你把所有的 $n$ 个节点分成两组,同组中的任意两个节点之间都有边直接连接。

  问连接同组节点的总边数最小为多少?如果不存在合法的划分方案,则输出 $-1$ 。

  数据范围: $n\leq 700, 0\leq m\leq \cfrac{n(n-1)}2 $

题解

  考虑到同组节点必须形成完全子图,这个性质和二分图恰好相反。

  所以我们考虑在其补图上找一个二分图,并求出这个二分图两侧节点数有哪些可能。

  对于每一个连通分量,我们进行黑白染色。如果不支持黑白染色,那么输出 $-1$ 。

  (假设最终的二分图分为左右两侧)

  记两种颜色的节点个数分别为 $x,y$ ,那么,既可以把 $x$ 个节点放入左侧,也可以把 $y$ 个节点放入左侧。

  所有的连通分量的结果综合一下,变成一个背包问题,我用了 $DP$ ,然后赛后看大神们直接用 $bitset$,方便极了。

  对于得到的所有可能的左侧节点数,我们算一下答案取 $min$ 即可。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=2005;
int n,m;
int g[N][N];
int dp[N],e[N],vis[N],x,y,f=0;
void dfs(int p,int t){
if (vis[p]){
if (vis[p]!=t+1)
f=1;
return;
}
vis[p]=t+1;
if (t)
x++;
else
y++;
for (int i=1;i<=n;i++)
if (i!=p&&!g[p][i])
dfs(i,t^1);
}
int calc(int x){
return x*(x-1)/2;
}
int main(){
scanf("%d%d",&n,&m);
for (int i=1,a,b;i<=m;i++){
scanf("%d%d",&a,&b);
g[a][b]=g[b][a]=1;
}
memset(dp,0,sizeof dp);
dp[0]=1;
for (int i=1;i<=n;i++){
if (vis[i])
continue;
x=0,y=0;
dfs(i,0);
memset(e,0,sizeof e);
for (int j=n;j>=0;j--)
e[j+x]|=dp[j],e[j+y]|=dp[j];
for (int j=0;j<=n;j++)
dp[j]=e[j];
}
if (f){
puts("-1");
return 0;
}
int ans=n*n*2;
for (int i=0;i<=n;i++)
if (dp[i])
ans=min(ans,calc(i)+calc(n-i));
printf("%d",ans);
return 0;
}

  

AtCoder Regular Contest 099 (ARC099) E - Independence 二分图的更多相关文章

  1. AtCoder Regular Contest 099

    AtCoder Regular Contest 099 C - Minimization 题意 题意:给出一个n的排列.每次操作可以使一段长度为K的连续子序列变成该序列的最小数.求最少几次使得整个数列 ...

  2. AtCoder Regular Contest 099 C~E

    C - Minimization 枚举就可以了 因为最后一定会变成1,所以第一次操作的区间就包含1会比较优,然后枚举1在第一次操作区间里排第几个取min即可 #include<iostream& ...

  3. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  4. AtCoder Regular Contest 094 (ARC094) CDE题解

    原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...

  5. AtCoder Regular Contest 092

    AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...

  6. AtCoder Regular Contest 093

    AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...

  7. AtCoder Regular Contest 094

    AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...

  8. AtCoder Regular Contest 095

    AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...

  9. AtCoder Regular Contest 102

    AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...

随机推荐

  1. Ex 4_10 给定一个有向图G=(V,E),其中边...(bellman-ford算法的应用).._第十二次作业

    在bellman-ford算法中,循环n-1(n为顶点个数)次可以找出从源点到其他顶点的最多n-1条边的最短路径,若循环k次则可以找出从源点到其他顶点的最多k条边的最短路径. package org. ...

  2. WebSocketTest 异步通讯,实时返回数据

    using System;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;usin ...

  3. Mysql8.0安装步骤

    Mysql8.0安装步骤 2018年05月10日 14:39:05 93年的香槟 阅读数:19628 标签: mysql 更多 个人分类: 数据库   版权声明:本文为博主原创文章,未经博主允许不得转 ...

  4. Confluence 6 配置 MySQL 服务器

    在这一步,你将要配置你的 MySQL 数据库服务器. 注意: 如果你尝试连接你的 Confluence 到一个已经存在的 MySQL 数据库服务器.我们强烈建议你按照下面描述的安装步骤在 MySQL ...

  5. 【Java】「深入理解Java虚拟机」学习笔记(4)- 类文件结构

    我为什么喜欢Java,另一个重要原因就是跨平台,WORA. 程序员是爽了,但肯定有人要为你遮风挡雨,解决WORA的基石就是字节码+虚拟机. ♣Tip 其实这里存在两种无关性,一是平台无关性.另一个是语 ...

  6. ionic3 隐藏子页面tabs

    看了几天ionic3 问题还挺多的,今天想把所有子页面tabs 给去掉,整了半天,发现app.Module 是可以配置的 修改 IonicModule.forRoot(MyApp) imports: ...

  7. 《剑指offer》用两个栈实现队列

    本题来自<剑指offer> 用两个栈实现队列 题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: 队列定义:先进先出 栈定义:先进后出 要 ...

  8. MySql在windows上的安装

    知乎安装教程 csdn安装教程 一.官网下载 ZIP Archive 内的软件包,mysql-xxx-win64.zip. 二.新建 MySQL 文件夹,解压缩下载包,进入文件夹(mysql-8.0. ...

  9. Friends number

    问题 : Friends number 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Paula and Tai are couple. There are many stories ...

  10. 什么是 TCP 拆、粘包?如何解决(Netty)

    前言 记得前段时间我们生产上的一个网关出现了故障. 这个网关逻辑非常简单,就是接收客户端的请求然后解析报文最后发送短信. 但这个请求并不是常见的 HTTP ,而是利用 Netty 自定义的协议. 有个 ...