hdu 5312 dp(背包)、二分图或其他姿势
题意:给出一个二分图(不一定连通),问最多能加多少边,使它仍然是二分图
BC周年庆第四题,貌似终判再终判之后数据还是有问题```
据说貌似可以用bitset搞,而且姿势优美是正解```然而我还是用的dp过的
首先就是用黑白染色判断每个区块的两边点的个数,接着因为要边数最多,所以显然要两边点数尽量接近,所以我就用01背包的方法,计算能够得到的 n/2 内的半边最大点数,中间加入已达到的最大值优化和黑白染色得到单点额外记录而不进入背包的优化```然后从TLE变成了200+ms过,只能说出数据的太执着于单点,如果构造出一张全是两点连线的图,大概妥妥爆炸```这个测试样例好鱼```然后就这样“卡”过去了,大概bitset才是真-正解吧```
#pragma comment(linker, "/STACK:102400000,102400000")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std; int head[],nxt[],point[],size=;
int num[];
int c[],dp[]; int max(int a,int b){
return a>b?a:b;
} int min(int a,int b){
return a<b?a:b;
} int read(){
int x=;
char c=getchar();
while(c>''||c<'')c=getchar();
while(c>=''&&c<=''){
x=x*+c-'';
c=getchar();
}
return x;
} void add(int a,int b){
point[size]=b;
nxt[size]=head[a];
head[a]=size++;
point[size]=a;
nxt[size]=head[b];
head[b]=size++;
} void dfs(int a,int x){
c[a]=x;
num[x]++;
for(int i=head[a];~i;i=nxt[i]){
int b=point[i];
if(c[b]==-)dfs(b,!x);
}
} int main(){
int T=read();
while(T--){
int n=read();
int m=read();
memset(head,-,sizeof(head));
size=;
memset(c,-,sizeof(c));
int i,j;
if(m==){
int a=n/;
printf("%d\n",a*(n-a));
continue;
}
for(i=;i<=m;i++){
int a=read();
int b=read();
add(a,b);
}
int cnt=,ans=,maxx=;
memset(dp,-,sizeof(dp));
dp[]=;
int k=;
for(i=;i<=n;++i){
if(c[i]==-){
num[]=num[]=;
dfs(i,);
if(num[]+num[]==){
k++;
continue;
}
for(j=min(n/,maxx+max(num[],num[]));j>=;--j){
if(j-num[]>=&&dp[j-num[]]==cnt){
dp[j]=cnt+;
maxx=max(maxx,j);
ans=max(ans,j);
}
if(j-num[]>=&&dp[j-num[]]==cnt){
dp[j]=cnt+;
maxx=max(maxx,j);
ans=max(ans,j);
}
}
cnt++;
}
}
ans=min(ans+k,n/);
int x1=n-ans;
printf("%d\n",x1*ans-m);
}
return ;
}
hdu 5312 dp(背包)、二分图或其他姿势的更多相关文章
- HDU 5234 DP背包
题意:给一个n*m的矩阵,每个点是一个蛋糕的的重量,然后小明只能向右,向下走,求在不超过K千克的情况下,小明最终能吃得最大重量的蛋糕. 思路:类似背包DP: 状态转移方程:dp[i][j][k]--- ...
- HDU 1011 树形背包(DP) Starship Troopers
题目链接: HDU 1011 树形背包(DP) Starship Troopers 题意: 地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...
- hdu 5445 多重背包
Food Problem Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...
- HDU 5928 DP 凸包graham
给出点集,和不大于L长的绳子,问能包裹住的最多点数. 考虑每个点都作为左下角的起点跑一遍极角序求凸包,求的过程中用DP记录当前以j为当前末端为结束的的最小长度,其中一维作为背包的是凸包内侧点的数量.也 ...
- hdu 1203 01背包 I need a offer
hdu 1203 01背包 I need a offer 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1203 题目大意:给你每个学校得到offe ...
- hdu 3016 dp+线段树
Man Down Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- 【bzoj1688】[USACO2005 Open]Disease Manangement 疾病管理 状态压缩dp+背包dp
题目描述 Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the farm. Far ...
- HDU 2844 混合背包、
题意:一个人想买手表,给你n个价值的硬币,然后给你n个价值硬币对应的个数.但是呢,这个人只知道这个手表的价格不超过m元.问他最多能买多少种价值的手表 思路:dp背包专题 但是- - 一直不知道该怎么d ...
- URAL_1018 Binary Apple Tree 树形DP+背包
这个题目给定一棵树,以及树的每个树枝的苹果数量,要求在保留K个树枝的情况下最多能保留多少个苹果 一看就觉得是个树形DP,然后想出 dp[i][j]来表示第i个节点保留j个树枝的最大苹果数,但是在树形过 ...
随机推荐
- angular5补漏知识点
1.属性行指令 attr.** 2.ngfor循环优化 trackBy func 3.aot编译 4.tree shaking 5.脏检测方法 6.管道的 pure和impure 7.asyncpip ...
- cmd 常用操作
2017-08-24 16:05:28 cd : change directory(目录) 功能:显示当前目录 类型:内部命令 格式:CD[盘符:][路径名][子目录名] 说明:CD命令不能改变当前所 ...
- PHP算法之排序算法(PHP内置排序函数)
首先用实例来讲述一下PHP内置的一些排序函数 [a / k] sort [/ rsort]:[保留索引关系 / 按键名(保留键名关系,适用于关联数组)] 对数组进行排序,结束时数组单元将被从最低到最高 ...
- SpringBoot+Mybatis-Generator自动生成
原文链接 1.版本 Spring Boot 1.5.10 mybatis-generator-core 1.3.5 mybatis-generator-maven-plugin 1.3.5 2.项目目 ...
- 基因家族收缩和扩张分析 & Selective loss pathway & 泛基因组
套路 这通常就是基因组组装后的必做分析,通过比较基因组学的手段进行分析,可以知道所研究物种在进化过程中哪些核心基因家族发生了变化,从而导致了其特殊的适应性机制的形成. 参考: Extremotoler ...
- 记录一个错误,在bundle install时候出现 shoulda-mathcers bundle install fails with git error
复制粘体错误到google.找到解决方案: https://github.com/thoughtbot/shoulda-matchers/issues/1057 GIT remote: https:/ ...
- hdu2955(概率DP)
The aspiring Roy the Robber has seen a lot of American movies, and knows that the bad guys usually g ...
- 深入了解 Java-Netty高性能高并发理解
https://www.jianshu.com/p/ac7fb5c2640f 一丶 Netty基础入门 Netty是一个高性能.异步事件驱动的NIO框架,它提供了对TCP.UDP和文件传输的支持,作为 ...
- plsql导入excel文件
plsql导入excel文件 CREATE TABLE DWSB_GRMX1 ( XH VARCHAR2(40), SFZH VARCHAR2(40 ...
- javaweb web.xml版本
web.xml版本的xsd分为如下几个版本 web-app_2_2.xsd web-app_2_3.xsd web-app_2_4.xsd web-app_2_5.xsd .... web-app_3 ...