Descirption

有n个人,每个人都有颜值bi与体重wi。剧场的容量为W。有m条关系,xi与yi表示xi和yi是好朋友,在一个小组。 每个小组要么全部参加舞会,要么参加人数不能超过1人。 问保证总重量不超过W,剧场中的颜值最大能到多少?

Input

第一行,三个整数n,m,w

第二行,n个整数w1,w2,...,wn

第三行,n个整数b1,b2,...,bn

接下来m行,每行表示一个关系,第i行有两个整数xi和yi。

每一组朋友关系都是不同的。

Output

一行,表示最大的魅力值总和。

不错的一个题。

考察:并查集+分组背包

我们先并查集将在一组的人处理出来.

顺便处理一下每个组的编号与组中每个人是谁.

\(belong[x]\)则代表\(x\)组的编号。

我们用\(ins[i][j]\)代表第\(i\)组的第\(j\)个元素是谁。

然后每一个小组可以全部去,可以去一个,可以不去。

考虑问题转化,我们将这一个小组看成一个物品,直接把其价值及体积加入到当前组即可

处理完之后,跑分组背包即可。

需要注意的一点是:如果某一组只有一个元素,我们不能再将其看为一个物品重新加入(克隆?)

代码

#include<cstdio>
#include<iostream>
#include<algorithm>
#define R register using namespace std; const int gz=1008; inline void in(int &x)
{
int f=1;x=0;char s=getchar();
while(!isdigit(s)){if(s=='-')f=-1;s=getchar();}
while(isdigit(s)){x=x*10+s-'0';s=getchar();}
x*=f;
} int n,m,w,wi[gz],f[gz],b[gz],dp[gz]; int find(R int x){return f[x]==x?x:f[x]=find(f[x]);} int belong[gz],cnt; int ins[gz][gz],W[gz],B[gz]; int main()
{
in(n),in(m),in(w);
for(R int i=1;i<=n;i++)in(wi[i]);
for(R int i=1;i<=n;i++)in(b[i]);
for(R int i=1;i<=n;i++)f[i]=i;
for(R int i=1,x,y;i<=m;i++)
{
in(x),in(y);
R int fa=find(x);
R int fb=find(y);
if(fa==fb)continue;
f[fa]=fb;
}
for(R int i=1;i<=n;i++)
{
R int x=find(i);
if(!belong[x])belong[x]=++cnt;
ins[belong[x]][++ins[belong[x]][0]]=i;
W[belong[x]]+=wi[i];
B[belong[x]]+=b[i];
}
for(R int i=1;i<=cnt;i++)
{
if(ins[i][0]!=1)
{
ins[i][++ins[i][0]]=n+1;
wi[n+1]=W[i];
b[n+1]=B[i];
}
for(R int j=w;j>=0;j--)
for(R int k=1;k<=ins[i][0];k++)
if(j>=wi[ins[i][k]])
dp[j]=max(dp[j],dp[j-wi[ins[i][k]]]+b[ins[i][k]]);
}
printf("%d",dp[w]); }

并查集+背包 【CF741B】 Arpa's weak amphitheater and Mehrdad's valuable Hoses的更多相关文章

  1. 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 ...

  2. 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 ...

  3. 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 ...

  4. 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 ...

  5. 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 而且如果邀请 ...

  6. 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 个人是一个 ...

  7. Codeforces 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses (并查集+分组背包)

    <题目链接> 题目大意: 就是有n个人,每个人都有一个体积和一个价值.这些人之间有有些人之间是朋友,所有具有朋友关系的人构成一组.现在要在这些组中至多选一个人或者这一组的人都选,在总容量为 ...

  8. Codeforce 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses(并查集&分组背包)

    题意: 给定n个价值为b 花费为w的物品, 然后某些物品是属于同一个组的, 给定一个花费限制V, 求在小于等于V的情况下取得到的价值最大为多少,能对于同一个组的物品,要么全取,要么只取一个. 分析: ...

  9. codeforces 742D Arpa's weak amphitheater and Mehrdad's valuable Hoses ——(01背包变形)

    题意:给你若干个集合,每个集合内的物品要么选任意一个,要么所有都选,求最后在背包能容纳的范围下最大的价值. 分析:对于每个并查集,从上到下滚动维护即可,其实就是一个01背包= =. 代码如下: #in ...

随机推荐

  1. Hibernate技术入门

    ORM原理 ORM(Object Relational Mapping)是对象到关系的映射,它的作用是在关系数据库和对象之间做一个自动映射,将数据库中的数据表映射成对象(持久化类),对关系型数据库以对 ...

  2. AtCoder Grand Contest 028 B - Removing Blocks 解题报告

    B - Removing Blocks Time limit : 2sec / Memory limit : 1024MB Score : 600 points ## Problem Statemen ...

  3. JQuery用鼠标选文字来发新浪微博

    最近注意到新浪博客有个小功能,就是当鼠标选中一段文字时会浮现一个小图片,点击这个图片可以把选中内容发送到新浪微博,一时兴起昨晚就写了一个Demo玩了一下,代码超简单,没优化,有兴趣的朋友可以自己改进. ...

  4. HDU 3446 有贪心思想的01背包

    Proud Merchants Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) ...

  5. java的GC与内存泄漏

    从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...

  6. 九大排序算法Java实现

    之前学习数据结构与算法时花了三天时间整理九大排序算法,并采用Java语言来实现,今天第一次写博客,刚好可以把这些东西从总结的文档中拿出来与大家分享一下,同时作为自己以后的备忘录. 1.排序算法时间复杂 ...

  7. 【Foreign】朗格拉日计数 [暴力]

    朗格拉日计算 Time Limit: 10 Sec  Memory Limit: 128 MB Description Input Output 仅一行一个整数表示答案. Sample Input 5 ...

  8. javascript学习3

    javascript数据类型.函数传参 javascript语言核心:ECMAScript 定义js的语法:基本对象.数据类型 js的数据类型 typeof运算符  判断数据类型 字符串.数字.布尔. ...

  9. bzoj 3223 裸splay

    裸的splay 今儿写的splay,由于自己刚开始学,发现几个容易漏掉的地方 1:开始给所有的儿子赋值为-1 2:给max[-1]赋值为-maxlongint 3:开始father[root]:=sr ...

  10. A way escape rbash

    hacker@beta:~$ ls -rbash: /usr/bin/python: restricted: cannot specify `/' in command names ryuu@beta ...