1387:搭配购买(buy)

简介: 1387:搭配购买(buy)

1387:搭配购买(buy)

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

Joe觉得云朵很美,决定去山上的商店买一些云朵。商店里有n朵云,云朵被编号为1,2,…,n,并且每朵云都有一个价值。但是商店老板跟他说,一些云朵要搭配来买才好,所以买一朵云则与这朵云有搭配的云都要买。

但是Joe的钱有限,所以他希望买的价值越多越好。

【输入】

第1行n,m,w,表示n朵云,m个搭配,Joe有w的钱。

第2~n+1行,每行ci,di表示i朵云的价钱和价值。

第n+2~n+1+m行,每行ui,vi,表示买ui就必须买vi,同理,如果买vi就必须买ui。

【输出】

一行,表示可以获得的最大价值。

【输入样例】

5 3 10

3 10

3 10

3 10

5 100

10 1

1 3

3 2

4 2

【输出样例】

1

【提示】

【数据范围】

30%的数据保证:n≤100;

50%的数据保证:n≤1,000;m≤100;w≤1,000;

100%的数据保证:n≤10,000;0≤m≤5000;w≤10,000。

1. //示例代码
2. #include <iostream>
3. #include <cstdio>
4. using namespace std;
5. const int N=10005;
6. int n,m,w;
7. int p,f[N],c[N],d[N],val[N];
8. int u,v;
9. 
10. // 并查集的查找函数,返回x号元素所在集合的根
11. int find(int x){
12. // 如果当前元素为其所在集合的根,则返回该元素
13.   if(f[x]==x) return f[x];
14. // 否则通过递归寻找该元素所在集合的根并路径压缩
15.   return f[x]=find(f[x]);
16. }
17. 
18. int main(){
19.   scanf("%d %d %d",&n,&m,&w);
20. // 输入n个云朵的属性之后,初始化并查集f,并对每个云朵作为单独的集合分别记录代价和价值
21. for(int i=1;i<=n;i++){
22.     scanf("%d %d",&c[i],&d[i]);
23.     f[i]=i;
24.   }
25. // 输入m个搭配方案,将相互依赖关系形成的云朵看做一个整体,使用并查集来实现
26.   for(int i=1;i<=m;i++){
27.     scanf("%d %d",&u,&v);
28. // 查找两个云朵所在集合的根节点
29.     int fu=find(u);
30.     int fv=find(v);
31.     if(fu!=fv){
32.       // 如果两个云朵不在同一个集合中,则合并它们所在的集合
33.       f[fv]=fu;
34. // 将搭配方案所包含的云朵的代价和价值累加到一个整体中
35.       c[fu]+=c[fv];
36.       d[fu]+=d[fv];
37.     }
38.   }
39. // 将并查集中的每一个集合看做一个物品,该物品的代价为搭配方案中所有云朵的代价之和,价值同理
40.   p=0;
41.   for(int i=1;i<=n;i++)
42.     if(f[i]==i){
43.       c[++p]=c[i];
44.       d[p]=d[i];
45.     }
46. // 使用01背包算法求解在购买代价不超过w的情况下可获得的最大价值
47.   for(int i=1;i<=p;i++)
48.     for(int j=w;j>=c[i];j--)
49.       val[j]=max(val[j],val[j-c[i]]+d[i]);
50.   printf("%d",val[w]);
51. return 0;
52. }


相关文章
|
负载均衡 Linux 数据库
阿里云轻量应用服务器套餐收费标准参考(组合套餐、负载均衡套餐等)
阿里云轻量应用服务器有多种套餐,在购买轻量应用服务器、轻量应用负载均衡、轻量容器服务和轻量数据库服务时,我们可以根据业务需求选择合适的套餐。本文为大家介绍阿里云轻量应用服务器套餐和镜像最新价格表以及相关收费说明。
706 0
阿里云轻量应用服务器套餐收费标准参考(组合套餐、负载均衡套餐等)
|
9月前
|
存储 Cloud Native 安全
阿里云目前优惠券最新种类、金额及使用区别参考
目前阿里云为用户推出了无门槛优惠券,上云抵扣金、算力补贴优惠券、上云礼包等不同种类的优惠券,助力更多用户优惠上云,但是这些优惠券在领取和使用规则上是不同的,本文为大家介绍目前阿里云的各种优惠券领取和使用注意事项,以供大家了解自己能领取或者申请哪些优惠券,在使用过程中需要注意什么。
阿里云目前优惠券最新种类、金额及使用区别参考
|
10月前
|
弹性计算 数据安全/隐私保护 对象存储
【新】如何使用计算巢SaaS Boost完成服务定价和售卖?
本文介绍了一种可帮您实现软件快速上云的阿里云计算巢开源工具,并给出了开发者指引和常见问题。基于该计算巢服务可快速帮助您的软件实现上云和售卖。
|
10月前
|
弹性计算 数据安全/隐私保护 对象存储
如何使用计算巢SaaS Boost完成服务定价和售卖?
本文介绍了一种可帮您实现快速SaaS化转型的阿里云计算巢开源工具的详细使用说明,开发者指引和常见问题。可使用计算巢SaaS Boost工具完成服务定价和售卖。
如何使用计算巢SaaS Boost完成服务定价和售卖?
|
弹性计算 双11
购买阿里云服务器先优惠券再购买流程参考
如果我们想阿里云服务器的价格更优惠一些的话,先优惠券再购买是非常有效的一个方式,首先就是要注意部分云服务器的购买条件,部分云服务器仅限新用户购买,其次一定要先领取阿里云送的各种优惠券,然后是在实际购买过程中尽量选择阿里云活动中的各种云服务器。本文为大家分享先领优惠券然后再通过阿里云的活动或者云服务器产品页面选购云服务器的实战教程,以供参考。
购买阿里云服务器先优惠券再购买流程参考
|
存储 弹性计算 Linux
阿里云服务器快速购买、自定义购买和通过活动选购三种方式图文教程及区别解析
阿里云服务器可以通过快速购买、自定义购买和活动选购三种方式去购买,这是一般用户最常见的购买方式,每种购买方式都有自己的适合场景,也有很多需要注意的地方,下面是这些购买方式的具体图文教程及注意事项,以供参考。
419 0
阿里云服务器快速购买、自定义购买和通过活动选购三种方式图文教程及区别解析
某商品有2种不同数量的包装,对应不同的价格;同时提供满200元减50元的不限量购物券,试求解最好购买策略,在单次购买中以最低总价购买正好500个商品
某商品有2种不同数量的包装,对应不同的价格;同时提供满200元减50元的不限量购物券,试求解最好购买策略,在单次购买中以最低总价购买正好500个商品
123 0
【1092】To Buy or Not to Buy (20 分)
【1092】To Buy or Not to Buy (20 分) 【1092】To Buy or Not to Buy (20 分)
105 0
|
存储 弹性计算 网络安全
阿里云服务器一键购买和自定义购买
阿里云服务器一键购买只可以选择突发性能实例t5,更多其他ECS实例规格配置需要选择自定义购买
1125 0
阿里云服务器一键购买和自定义购买
购买阿里云产品后,如何使用提货卷,在哪里查找 在哪查看?
阿里云提货券的使用,很简单,只要找到阿里云提货券,使用起来一点难度都没有。