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

「LuoguP2170」 选学霸(01背包的更多相关文章

  1. LibreOJ2095 - 「CQOI2015」选数

    Portal Description 给出\(n,k,L,R(\leq10^9)\),求从\([L,R]\)中选出\(n\)个可相同有顺序的数使得其gcd为\(k\)的方案数. Solution 记\ ...

  2. 「CQOI2015」选数

    「CQOI2015」选数 题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都 ...

  3. codevs3370 选学霸(背包dp,并查集)

    3372 选学霸  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master     题目描述 Description 老师想从N名学生中选M人当学霸,但有K对人实力相 ...

  4. codevs 1025 选菜——01背包

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 在小松宿舍楼下的不远处,有PK大学最不错的一个食堂—— ...

  5. codevs——3372 选学霸(背包)

    题目等级 : 大师 Master  时间限制: 1 s  空间限制: 128000 KB 题解       题目描述 Description 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实 ...

  6. 「CF1154F」Shovels Shop【背包DP】

    题目链接 [洛谷传送门] 题解 非常简单的背包. \(f[i]\)表示购买\(i\)个物品所需要最少的花费. 不考虑免费的限制条件,那么一定是选择前\(k\)个双鞋子. 那么加入免费的条件,那么还是要 ...

  7. LOJ 2586 「APIO2018」选圆圈——KD树

    题目:https://loj.ac/problem/2586 只会 19 分的暴力. y 都相等,仍然按直径从大到小做.如果当前圆没有被删除,那么用线段树把 [ x-r , x+r ] 都打上它的标记 ...

  8. 【LOJ】#2586. 「APIO2018」选圆圈

    题解 不旋转坐标系,TLE,旋转坐标系,最慢一个点0.5s--maya,出题人数据水平很高了-- 好吧,如果你不旋转坐标系,写一个正确性和复杂度未知的K - D树,没有优化,你可以得到87分的好成绩 ...

  9. LG4516/LOJ2546 「JSOI2018」潜入行动 树上背包

    问题描述 LG4516 LOJ2546 题解 好一个毒瘤题. hkk:JSOI的签到题 设\(opt[i][j][0/1][0/1]\)代表结点\(i\)的子树,放置\(j\)个,\(i\)放不放,\ ...

随机推荐

  1. eopkg命令

    #命令: add-repo (ar)  ---添加存储库 blame (bl)  ---包所有者和发布信息 build (bi)  ---建立eopkg包 check  ---验证安装 clean  ...

  2. Hibernate 与Mybatis之比较

    1. hibernate是全自动,而mybatis是半自动.hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql.而mybat ...

  3. 框架-数据库定义MD5加密

    1.--定义Md5加密declare @pt_pwd varchar(50)set @pt_pwd = ''set @pt_pwd = substring(sys.fn_sqlvarbasetostr ...

  4. HeatMap(热图)的原理和实现

    先来看两张图: (1)10年世界杯决赛,冠军西班牙队中门将.后卫.中场及前锋的跑位热图 通过热图,我们可以很清楚的看出四个球员在比赛中跑动位置的差异. (2)历史地震震源位置的热图 也可以很清楚的看出 ...

  5. U盘容纳不了大于4G的文件比如ISO文件咋办?

    格式化U盘成NTFS格式就行了,不这么做8,16,32G Upan都容纳不下来.

  6. Android四大组件的生命周期

    介绍生命周期之前,先提一下任务的概念 任务其实就是activity 的栈它由一个或多个Activity组成的共同完成一个完整的用户体验, 换句话说任务就是” 应用程序” (可以是一个也可以是多个,比如 ...

  7. 模拟 nbut1225 NEW RDSP MODE I

    传送门:点击打开链接 题意:输入n.m,x.刚開始有一个1~n的排列.然后定义了一种操作.是将数组中的偶数位数字选出来,依照顺序放到数组最前面,奇数位依照顺序放到偶数位的后面,进行m次这种操作.输出之 ...

  8. HDU 1114 Piggy-Bank (完全背包)

    Piggy-Bank Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  9. Java中常见的注解

    Java中常见的注解 1.JDK自带的注解@Override  @Deprecated  @Suppvisewarnings 常见第三方注解 Spring:@Autowired  @Service  ...

  10. return和exit

    return从当前函数返回而exit结束正在运行的程序 示例: [wangml@iZwz976helaylvgqok97prZ testForC]$ ./exit.test q [wangml@iZw ...