题意:给出一个二分图(不一定连通),问最多能加多少边,使它仍然是二分图

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 ;
}

最新文章

  1. java内存泄漏的定位与分析
  2. JavaScript 的 defer 与 async
  3. AppleDoc的安裝使用
  4. Linux(Ubuntu)之设定开机自启动
  5. zoom作用
  6. python内置函数 2
  7. Android SDK Android NDK 官方下载地址
  8. Spring4.0学习笔记(9) —— Spring泛型依赖注入
  9. REST、SOA、SOAP、RPC、ICE、ESB、BPM知识汇总及理解
  10. Hibernate - cascade-and -session_state
  11. 【转】在CentOS上安装tomcat
  12. 通过ssh协议实现用户key认证登录
  13. inode 详解
  14. TextView 的新特性,Autosizing 到底是如何实现的? | 源码分析
  15. arduino笔记
  16. absort函数和exit函数
  17. 随心测试_数据库_002 &lt;数据库系统组成&gt;
  18. Python模拟弹道轨迹
  19. Web程序-----批量生成二维码并形成一张图片
  20. 第二阶段第一次spring会议

热门文章

  1. C# int.ToString() 常用参数说明
  2. spring boot:创建一个简单的web(maven web project)
  3. Jmeter JDBC的使用
  4. 关于&quot;架构&quot;
  5. ubuntu vim简单命令
  6. OAF中下载附件之后页面失效,报过时的数据异常,浏览器后退异常
  7. PaodingAnalysis 提示 &quot;dic home should not be a file, but a directory&quot;
  8. 桥接、nat、host-only
  9. BZOJ2590 [Usaco2012 Feb]Cow Coupons
  10. UVALive 5846 计数