codeforces 741B
来源:互联网 发布:山西省网络文学院 编辑:程序博客网 时间:2024/06/05 11:06
题目大意:
有n个人,每个人都有对应的value值和weight值, 并且每个人都有自己的朋友圈,这个朋友圈的人要不全部参加party,否则至多只有一个人可以参加;
题目分析:
分组背包,顺带处理所有人都参加的情况;
一个朋友圈就是一个分组,使用并查集可以很简单的完成分组的过程;
代码如下:
#include <bits/stdc++.h>using namespace std;const int maxn = 1005;int n, m, W;int w[maxn], v[maxn], d[maxn], p[maxn];vector<int> iv[maxn];int sw[maxn], sv[maxn]; // 表示每一组的总和重量和总和价值;void init(){ for(int i = 0; i < n; ++i) p[i] = i; for(int i = 0; i < n; ++i) iv[i].clear(); memset(d, 0, sizeof(d)); memset(sw, 0, sizeof(sw)); memset(sv, 0, sizeof(sv));}int Find(int x){ return x == p[x] ? x : p[x] = Find(p[x]);}void Union(int x, int y){ int xRoot = Find(x), yRoot = Find(y); p[xRoot] = yRoot;}int main(){ scanf("%d%d%d", &n, &m, &W); for(int i = 0; i < n; ++i) scanf("%d", &w[i]); for(int i = 0; i < n; ++i) scanf("%d", &v[i]); init(); for(int i = 0; i < m; ++i){ int u, v; scanf("%d%d", &u, &v); u--, v--; Union(u, v); } for(int i = 0; i < n; ++i){ Find(i); iv[p[i]].push_back(i); } for(int i = 0; i < n; ++i){ // 记录每组的总重和总值; for(int j = 0; j < (int)iv[i].size(); ++j){ int id = iv[i][j]; sw[i] += w[id], sv[i] += v[id]; } } for(int i = 0; i < n; ++i){ if(i!=p[i]) continue; for(int j = W; j >= 0; --j){ for(int k = 0; k < (int)iv[i].size(); ++k){ //分组背包; int id = iv[i][k]; if(j-w[id] >= 0) d[j] = max(d[j], d[j-w[id]]+v[id]); } if(j-sw[i] >= 0){ // 处理所有人都参加的情况; d[j] = max(d[j], d[j-sw[i]]+sv[i]); } } } printf("%d\n", d[W]);}
0 0
- codeforces 741B
- codeforces 741B
- codeforces B
- codeforces B
- codeforces B
- codeforces B
- Codeforces 741B 并查集+dp
- CodeForces 626B CodeForces 626B【暴力】
- CodeForces 841B (B) 博弈
- codeforces 134B
- codeforces#98 b
- codeforces 105 div2 B
- Codeforces 166B - Polygons
- codeforces B. Coins
- codeforces----193B Xor
- codeforces----208B Solitaire
- Codeforces 1B - Spreadsheet
- codeforces 214B Hometask
- 2016.12.9 初步了解shiro
- 二叉树
- 栈的应用:四则运算表达式值:
- 组合逻辑与时序逻辑
- [uboot] uboot启动kernel篇(三)——uboot解析uImage的kernel信息
- codeforces 741B
- 有向图的强连通分支算法kosaraju(C语言实现)
- java通过JDBC来访问数据库的过程
- Retrofit 设置 超时时间
- flume学习(五):使用hive来分析flume收集的日志数据
- 为什么会出现雷粉?他们为什么会流失?怎样维护和粉丝之间的关系?
- 斐讯K1s刷华硕固件
- Crowdsourcing Logistics
- Servlet总结(2)--ServletConfig和ServletContext对象