#383 Div1 Problem B Arpa's weak amphitheater.... (分组背包 && 并查集)
题意 : 有n个人,每个人都有颜值bi与体重wi。剧场的容量为W。有m条关系,xi与yi表示xi和yi是好朋友,在一个小组。 每个小组要么全部参加舞会,要么参加人数不能超过1人。 问保证总重量不超过W,剧场中的颜值最大能到多少?
分析 : 很显然的分组背包题目, 不过有所不同, 先来回顾一下普通的分组背包的描述 给出一个背包,背包有容量C,再给出N组物品,每组物品有ki种,每种物品有对应的体积Vi,价值Pi,每组物品至多选一种,且最多取一件。求用背包装物品,能获得的最大总价值是多少。可以发现和上面的不同之处就是多了一个可以全取的操作, 其实只要再在每一组里面加上所有的物品和就行了, 便成了一道普通的模板题了!在分组的时候使用简单的并查集即可!
瞎搞 : 在实现的时候很慢, 还老是犯小错误, 归其原因就是分组背包接触太少, 即使是模板题也写的有点不流利!
#include<bits/stdc++.h>
using namespace std;
struct st
{
int w, v, id;
};
st arr[];
][], w[][], dp[], p[];///p数组表示各个组里面的物品个数
], sumw[];
];
map<int, int> M;
int findset(int x)
{
int root = x;
while(c[root] != root) root = c[root];
int j;
while(c[x] != root){
j = c[x];
c[x] = root;
x = j;
}
return root;
}
inline int join(int a, int b)
{
int f = findset(a), ff = findset(b);
if(f != ff){
c[f] = ff;
}
}
#define IN 0
#define OUT 0
int main(void)
{
#if IN
freopen("in.txt", "r", stdin);
#endif
#if OUT
freopen("out.txt", "w", stdout);
#endif
int n, m, C;
scanf("%d%d%d", &n, &m, &C);
M.clear();
; i<=n; i++){
memset(v[i], , sizeof(v[i]));
memset(w[i], , sizeof(w[i]));
memset(p, , sizeof(p));
memset(dp, , sizeof(dp));
memset(sumw, , sizeof(sumw));
memset(sumv, , sizeof(sumv));
arr[i].id = i;//忽略这个id, 没有用, 懒得改了.....
c[i] = i;
}
; i<=n; i++) scanf("%d", &arr[i].w);
; i<=n; i++) scanf("%d", &arr[i].v);
; i<m; i++){
int a, b;
scanf("%d%d", &a, &b);
join(a, b);
}
;///表示组数
];
memset(vis, true, sizeof(vis));
; i<=n; i++){
int temp = findset(i);
if(vis[temp]){///如果还没有出现过这个在并查集里面的“大佬”
M[temp] = top;//记录一下老大所在的组的下标元素
vis[temp] = false;
v[top][p[top]] = arr[i].v;
w[top][p[top]] = arr[i].w;
sumv[top] += arr[i].v;
sumw[top] += arr[i].w;
p[top]++, top++;
}else{
int Top = M[temp];
v[Top][p[Top]] = arr[i].v;
w[Top][p[Top]] = arr[i].w;
sumv[Top] += arr[i].v;
sumw[Top] += arr[i].w;
p[Top]++;
}
}
; i<top; i++){
) continue;//这里需要注意, 只有一个元素的时候, 不应该再加所有元素的和, 会重复的!
v[i][p[i]] = sumv[i];
w[i][p[i]] = sumw[i];
p[i]++;
}
///Debug begin
// printf("top = %d\n", top);
// for(int i=0; i<top; i++){
// printf("In group %d\n", i);
// printf("v");puts("");
// for(int j=0; j<p[i]; j++){
// printf("ord=%d, v=%d\n", j, v[i][j]);
// }
// printf("w");puts("");
// for(int j=0; j<p[i]; j++){
// printf("ord=%d, w=%d\n", j, w[i][j]);
// }
// puts("");
// }
// puts("");
///Debug end
; i<top; i++){
; j--){
; k<p[i]; k++){
if(w[i][k] <= j)
dp[j] = max(dp[j], dp[j-w[i][k]]+v[i][k]);
}
}
///Debug begin
// for(int ii=1; ii<=C; ii++){
// printf("%d ", dp[ii]);
// }
// puts("");
///Debug end
}
printf("%d\n", dp[C]);
;
}
#383 Div1 Problem B Arpa's weak amphitheater.... (分组背包 && 并查集)的更多相关文章
- Codeforces Round #383 (Div. 2) D. Arpa's weak amphitheater and Mehrdad's valuable Hoses(分组背包+dsu)
D. Arpa's weak amphitheater and Mehrdad's valuable Hoses Problem Description: Mehrdad wants to invit ...
- Codeforces Round #383 (Div. 2) D. Arpa's weak amphitheater and Mehrdad's valuable Hoses —— DP(01背包)
题目链接:http://codeforces.com/contest/742/problem/D D. Arpa's weak amphitheater and Mehrdad's valuable ...
- Codeforces Round #383 (Div. 2)D. Arpa's weak amphitheater and Mehrdad's valuable Hoses(dp背包+并查集)
题目链接 :http://codeforces.com/contest/742/problem/D 题意:给你n个女人的信息重量w和美丽度b,再给你m个关系,要求邀请的女人总重量不超过w 而且如果邀请 ...
- Arpa's weak amphitheater and Mehrdad's valuable Hoses
Arpa's weak amphitheater and Mehrdad's valuable Hoses time limit per test 1 second memory limit per ...
- B. Arpa's weak amphitheater and Mehrdad's valuable Hoses
B. Arpa's weak amphitheater and Mehrdad's valuable Hoses time limit per test 1 second memory limit p ...
- Codeforces 741B:Arpa's weak amphitheater and Mehrdad's valuable Hoses(01背包+并查集)
http://codeforces.com/contest/741/problem/B 题意:有 n 个人,每个人有一个花费 w[i] 和价值 b[i],给出 m 条边,代表第 i 和 j 个人是一个 ...
- Codeforces 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses
[题目链接] http://codeforces.com/problemset/problem/741/B [题目大意] 给出一张图,所有连通块构成分组,每个点有价值和代价, 要么选择整个连通块,要么 ...
- D. Arpa's weak amphitheater and Mehrdad's valuable Hoses 分组背包模板题
http://codeforces.com/problemset/problem/742/D 并查集预处理出所有关系. 一开始的时候,我预处理所有关系后,然后选择全部的时候,另起了一个for,然后再判 ...
- 【42.86%】【codeforces 742D】Arpa's weak amphitheater and Mehrdad's valuable Hoses
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
随机推荐
- MySQL 常用命令和基础语法
-- mysql 命令 SHOW DATABASES; #查看目前系统中存在的数据库 use database_name; #切换数据库 SHOW TABLES; #显示当前数据库下面的所有可用的表 ...
- centos7 中如何查看、打开、关闭防火墙。
首先是看centos7的防火墙的状态,查看的命令为: sudo systemctl status firewalld. 查看后,看到active(running)就意味着防火墙打开了, 如果想关闭防火 ...
- CF650A Watchmen(STL+map)
目录 CF650A Watchmen 1. 手推公式 2.算法 3.优化 4.补充 CF650A Watchmen 只有三个map的一篇题解 1. 手推公式 \(|x2-x1|+|y2-y1|=\sq ...
- 【转帖】是时候给大家介绍 Spring Boot/Cloud 背后豪华的研发团队了。
是时候给大家介绍 Spring Boot/Cloud 背后豪华的研发团队了. 2019/01/03 http://www.ityouknow.com/springboot/2019/01/03/spr ...
- MySql MediumBlob——MySql的Bolb四种类型
MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据.BLOB类型实际是个类型系列(TinyBlob.Blob.MediumBlob.LongBlob),除 ...
- CPU飙高,频繁GC,怎么排查?
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题.当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警. 本文主要针对系统运行缓慢 ...
- 洛谷P1029 最大公约数和最小公倍数问题 (简单数学题)
一直懒的写博客,直到感觉不写不总结没有半点进步,最后快乐(逼着)自己来记录蒟蒻被学弟学妹打压这一年吧... 题目描述 输入22个正整数x_0,y_0(2 \le x_0<100000,2 \le ...
- IDEA Maven项目 pom.xml 找不到 Dependency 依赖
转载: IDEA Maven项目 pom.xml 找不到 Dependency 依赖 如果你的pom.xml中使用了dependencyManagement管理依赖并且添加了你本地仓库中不存在的依赖可 ...
- Comet OJ - Contest #13 「火鼠的皮衣 -不焦躁的内心-」
来源:Comet OJ - Contest #13 芝士相关: 复平面在信息学奥赛中的应用[雾 其实是道 sb 题??? 发现原式貌似十分可二项式定理,然后发现确实如此 我们把 \(a^i\) 替换成 ...
- Codeforces 10D LCIS 求最长公共上升子序列及输出这个子序列 dp
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq574857122/article/details/34430283 题目链接:点击打开链接 题意 ...