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


相关文章
|
1月前
|
存储 弹性计算 固态存储
阿里云服务器收费标准、价格计算器使用及最新活动价格参考
阿里云服务器收费标准参考,目前阿里云服务器最低配置为2核0.5G,收费标准为8.5/月,有的用户在购买阿里云服务器前,需要了解一下阿里云服务器的价格,可以使用价格计算器来快速查询云服务器的实例规格、带宽、云盘价格。另外,随着2024金秋云创季活动的开启,云服务器的最新活动价格情况也是很多用户比较关心的,本文也为大家整理汇总了云服务器的收费标准、价格计算器使用教程及云服务器的金秋云创季价格情况,以供参考和选择。
|
弹性计算 双11
购买阿里云服务器先优惠券再购买流程参考
如果我们想阿里云服务器的价格更优惠一些的话,先优惠券再购买是非常有效的一个方式,首先就是要注意部分云服务器的购买条件,部分云服务器仅限新用户购买,其次一定要先领取阿里云送的各种优惠券,然后是在实际购买过程中尽量选择阿里云活动中的各种云服务器。本文为大家分享先领优惠券然后再通过阿里云的活动或者云服务器产品页面选购云服务器的实战教程,以供参考。
购买阿里云服务器先优惠券再购买流程参考
|
存储 缓存 弹性计算
阿里云官网活动中的云服务器如何购买价格能更低一些,5个方法及细节选择介绍
大部分阿里云用户以为购买阿里云活动中的云服务器价格就是最低的了,毕竟活动价格都是很低的,其实不是的,在实际选择过中,如果我们想价格更加低一点,选择价格更低的云服务器实例规格,选择价格相对更便宜的地域,注意不同活动之间的价格区别以及选择按量带宽模式都可以帮助我们以更低的价格购买到想要的云服务器,下面小编就根据自己的选购经验为大家介绍几个价格更便宜的选购方式和选购细节。
347 0
阿里云官网活动中的云服务器如何购买价格能更低一些,5个方法及细节选择介绍
|
存储 弹性计算 Linux
阿里云服务器快速购买、自定义购买和通过活动选购三种方式图文教程及区别解析
阿里云服务器可以通过快速购买、自定义购买和活动选购三种方式去购买,这是一般用户最常见的购买方式,每种购买方式都有自己的适合场景,也有很多需要注意的地方,下面是这些购买方式的具体图文教程及注意事项,以供参考。
363 0
阿里云服务器快速购买、自定义购买和通过活动选购三种方式图文教程及区别解析
|
弹性计算 安全 固态存储
阿里云服务器怎么买?自定义购买与通过活动购买流程图解及注意事项
本文以图文形式介绍了通过阿里云服务器产品页面自定义购买云服务器和通过阿里云的优惠活动购买云服务器的流程,同时介绍了一些购买过程中应该注意的注意事项,适合还未使用过阿里云服务器的新手用户们参考。
365 0
阿里云服务器怎么买?自定义购买与通过活动购买流程图解及注意事项
|
弹性计算 固态存储 数据可视化
阿里云服务器购买价格及月租费用分析
2023年阿里云服务器购买价格及月租费用分析,2023年阿里云服务器租用费用,轻量应用服务器和云服务器ECS优惠价格表,阿里云轻量应用服务器2核2G3M带宽轻量服务器一年108元,2核4G4M带宽轻量服务器一年297.98元12个月,云服务器ECS包括通用算力型u1、ECS计算型c7、通用型g7和内存型r7均有活动
194 0
|
弹性计算 Linux 开发工具
阿里云学生服务器地址/购买条件/价格/续费等问题及解答FAQ
2023阿里云学生服务器地址/购买条件/价格/续费等问题及解答FAQ,如果你从未参与过阿里云高校学生免费领取ECS的活动,在通过学生身份认证及续费任务后,最多可领取1+6个月免费云服务器ECS资源
182 0
|
弹性计算
阿里云服务器价格日常价、活动价格及使用优惠券后实际购买价格参考
阿里云服务器实际购买价格参考,最低款1核1G配置云服务器日常价766.80元/1年,最新活动价格为306.72元/1年起,目前还可以使用满减优惠券抵扣30元,实际购买270.72元/1年起;2核4G配置日常价1706.40元/1年,活动价682.56元/1年起,券后价632.56元/1年起。小面是小编整理汇总的阿里云服务器最新价格表,包含日常价、活动价格、可使用满减优惠券金额以及券后价格,仅供参考。
阿里云服务器价格日常价、活动价格及使用优惠券后实际购买价格参考
|
弹性计算 固态存储 应用服务中间件
如何查询阿里云服务器价格与收费标准
阿里云服务器收费标准在云服务器页面“产品价格”和“价格计算器”中可以查看,产品价格可了解不同地域的实例价格、块存储价格、带宽价格、快照服务价格等收费标准,价格计算器可快速查询所选云服务器的实例、块存储、带宽的详细收费价格,官网最新活动栏目可了解当下阿里云服务器的活动价格。
628 0
如何查询阿里云服务器价格与收费标准
|
存储 弹性计算 网络安全
阿里云服务器一键购买和自定义购买
阿里云服务器一键购买只可以选择突发性能实例t5,更多其他ECS实例规格配置需要选择自定义购买
1099 0
阿里云服务器一键购买和自定义购买