Description


老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一部分没有,同学们就会抗议。所以老师想请你帮他求出他该选多少学霸,才能既不让同学们抗议,又与原来的M尽可能接近

Input


第一行,三个正整数N,M,K。

第2…K行,每行2个数,表示一对实力相当的人的编号(编号为1…N)

Output


一行,表示既不让同学们抗议,又与原来的M尽可能接近的选出学霸的数目。(如果有两种方案与M的差的绝对值相等,选较小的一种:)

Sample Input


4 3 2
1 2
3 4

Sample Output


2

Hint


100%的数据N,P<=20000

题解


用并查集把一起的合起来

构建背包模型 价值和体积相同

然后跑两遍01背包 一遍体积为m 另一遍体积为n-m(ans=n-f[n-m])

然后比较两个ans和m的差值大小关系 按要求输出

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int fa[20007],bel[20007];
int n,m,k;
int fifa(int x)
{
if(fa[x]==x)return x;
return fa[x]=fifa(fa[x]);
}
void con(int x,int y)
{
int u=fifa(x),v=fifa(y);
if(u!=v)fa[u]=v;
return;
}
int s[20007];
int tos=0;
void scan()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;++i)fa[i]=i;
int x,y;
for(int i=1;i<=k;++i)
{
scanf("%d%d",&x,&y);
con(x,y);
}
for(int i=1;i<=n;++i)
{
fifa(i);
bel[fa[i]]++;
}
for(int i=1;i<=n;++i)
if(bel[i])s[++tos]=bel[i];
return;
}
int f[20007];
void dp()
{
/*
for(int i=1;i<=tos;++i)
cout<<s[i]<<" ";
cout<<endl;
*/
for(int i=1;i<=tos;++i)
for(int j=m;j>=s[i];--j)
f[j]=max(f[j],f[j-s[i]]+s[i]);
int ans1=f[m];
memset(f,0,sizeof(f));
for(int i=1;i<=tos;++i)
for(int j=n-m;j>=s[i];--j)
f[j]=max(f[j],f[j-s[i]]+s[i]);
int ans2=n-f[n-m];
//cout<<ans1<<" "<<ans2<<endl;
if(m-ans1<=ans2-m)cout<<ans1;
else cout<<ans2;
return;
}
int main()
{
scan();
dp();
}

最新文章

  1. 【代码笔记】iOS-获取系统完成任务所需的后台时间
  2. js 事件冒泡
  3. Working with Transactions (EF6 Onwards)
  4. 添加本地jar到Maven库
  5. django基于正则的url匹配
  6. PHP clone
  7. SSH开发实践part4:Spring整合Struts
  8. Wpf ListBox数据绑定实例1--绑定字典集合
  9. skynet的流程2
  10. 设置span 宽度的完美解决方案
  11. Ztorg木马分析: 从Android root木马演变到短信吸血鬼
  12. Hibernate 的原生 SQL 查询
  13. 【莫比乌斯反演】BZOJ2820 YY的GCD
  14. Tomcat 访问页面或服务器异常,请检查这些方面
  15. Python 编程快速上手 第十四章 处理 CSV 文件和 JSON 数据
  16. 正则表达式 —— Cases 与 Tricks
  17. oozie java api提交作业
  18. http协议基础(九)响应首部字段
  19. RDD之五:Key-Value型Transformation算子
  20. 第一次spring冲刺第5天

热门文章

  1. HDU 1394 线段树求逆序对
  2. 《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项
  3. Nginx负载均衡配置实例(转)
  4. php使用strpos,strstr,strchr注意啦,若是数字查找则会当成ASCII码处理
  5. SSD S.M.A.R.T
  6. iOS开发-用keychain替代UDID
  7. add swapspace file on ubuntu.
  8. sql 导入数据库 出现乱码问题 解决办法 设置 --default-character-set=utf8
  9. oracle 11G direct path read 非常美也非常伤人
  10. Linux上Libevent的安装