洛谷 P2170 选学霸
来源:互联网 发布:kyocera打印机驱动mac 编辑:程序博客网 时间:2024/06/16 05:16
题目描述
老师想从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
//并查集搞一下 + DP 也可以Tarjan #include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define MAXN 20005using namespace std;int par[MAXN],rank[MAXN],siz[MAXN];int dp[MAXN],n,m,k;inline void read(int &x){ x=0; int f=1; char c=getchar(); while(c>'9'||c<'0'){ if(c=='-')f=-1; c=getchar(); } while(c>='0'&&c<='9'){ x=x*10+c-'0'; c=getchar(); } }int Find(int x){ if(x == par[x]) return x; else return par[x] = Find(par[x]);}inline void Megre(int x,int y){ x = Find(x), y = Find(y); if(x == y) return ; if(rank[x] < rank[y]) par[x] = y; else { if(rank[x] == rank[y]) ++rank[x]; par[y] = x; }}int main(int argc,char *argv[]){ read(n),read(m),read(k); for(int i=1; i<=n; ++i) par[i] = i; for(int u,v,i=1; i<=k; ++i){ read(u),read(v); if(Find(u) != Find(v)) Megre(u,v); } for(int i=1; i<=n; ++i) ++siz[Find(i)]; int Num = 0; for(int i=1; i<=n; ++i) if(siz[i]) siz[Num ++] = siz[i]; for(int i=0; i<Num; ++i) for(int j=n; j>=siz[i]; --j) if( abs(m - dp[j]) > abs(m - dp[j - siz[i]] - siz[i]) ) dp[j] = dp[j - siz[i]] + siz[i]; int Ans = 99999999; for(int i=0; i<=n; ++i) if(abs(m - dp[i]) < abs(m - Ans)) Ans = dp[i]; printf("%d\n" ,Ans); return 0;}
siz 重复用了,省内存,看不懂的新开一个数组就好。
阅读全文
0 0
- 洛谷 P2170 选学霸
- 洛谷P2170选学霸(玄学吧)
- Codevs P3372 选学霸
- 【codevs3372】选学霸,并查集+可达性DP
- Codevs_P3372 选学霸(并查集+DP+背包)
- 洛谷
- 洛谷
- 洛谷
- codevs 3372 选学霸(hash+并查集+多重背包)
- Codevs 3372 选学霸(并查集+剩余空间最小的背包问题)
- 洛谷 中位数
- 洛谷p1373
- 洛谷 P1579
- 洛谷P1313
- 洛谷1028
- 洛谷P1373
- 洛谷P1040
- 洛谷P1039
- Samba服务器创建与使用
- 工厂模式
- MySQL备注不熟悉的DML|DDL 语句
- React Native 开发适配心得
- Android 设计模式之代理模式
- 洛谷 P2170 选学霸
- C++入门基础知识
- I
- bzoj 4517: [Sdoi2016]排列计数
- 使用Python WSGI编写Web服务器前端,并利用Boost.Python在同一进程内连接到C++服务后端实现
- Quartz定时任务删除冗余操作日志(二)
- shell命令之重定向输出 1,2>,>,>>
- mysql配置文件详解
- 守护线程 python 笔记