题目描述
老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一部分没有,同学们就会抗议。所以老师想请你帮他求出他该选多少学霸,才能既不让同学们抗议,又与原来的M尽可能接近
输入输出格式
输入格式:
第一行,三个正整数N,M,K。
第2...K行,每行2个数,表示一对实力相当的人的编号(编号为1…N)
输出格式:
一行,表示既不让同学们抗议,又与原来的M尽可能接近的选出学霸的数目。(如果有两种方案与M的差的绝对值相等,选较小的一种:)
输入输出样例
输入样例#1:
4 3 2 1 2 3 4
输出样例#1:
2
说明
100%的数据N,P<=20000
对于这道题,我们需要先搞一个并查集把实力相同的人都存进去,这样我们就可以得到每种实力的人分别有多少个。
把它当成一个01背包(范围要开到2*m,因为可能有比m大但是大小仍和m相近的答案出现)过一遍
然后我们枚举在选的人数,始终维护与m差值最小的那个。
它就是答案啦!
#include<cstdio>
#include<cstring>
#include<cmath>
#include