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


相关文章
|
Python
新手向 Python:VsCode环境下Manim配置
该文介绍了如何准备和配置开发环境以使用Manim,主要包括两个步骤:一是准备工作,需要下载并安装VsCode和Anaconda,其中Anaconda需添加到系统PATH环境变量,并通过清华镜像源配置;二是配置环境,VsCode中安装中文插件和Python扩展,激活并配置虚拟环境。最后,安装ffmpeg和manim,通过VsCode运行测试代码验证配置成功。
1574 1
|
10月前
|
开发框架 前端开发 Go
eino — 基于go语言的大模型应用开发框架(二)
本文介绍了如何使用Eino框架实现一个基本的LLM(大语言模型)应用。Eino中的`ChatModel`接口提供了与不同大模型服务(如OpenAI、Ollama等)交互的统一方式,支持生成完整响应、流式响应和绑定工具等功能。`Generate`方法用于生成完整的模型响应,`Stream`方法以流式方式返回结果,`BindTools`方法为模型绑定工具。此外,还介绍了通过`Option`模式配置模型参数及模板功能,支持基于前端和用户自定义的角色及Prompt。目前主要聚焦于`ChatModel`的`Generate`方法,后续将继续深入学习。
1296 7
|
存储 分布式计算 大数据
《数据湖的时空穿越:Delta Lake如何用版本控制解锁历史迷雾》
【8月更文挑战第27天】Delta Lake作为一个开源的存储层为Apache Spark及大数据工作流带来了事务性支持与数据版本控制功能。通过将数据表视作一系列不可变的事务日志记录,Delta Lake实现了数据一致性的保障。它支持ACID事务并允许用户追踪和管理数据表的不同版本。利用提供的示例代码可以看到如何对Delta Lake表进行操作、查询特定版本甚至回滚至早期版本。随着数据湖架构的发展,Delta Lake正逐渐成为管理大规模数据集的关键工具。
207 0
|
存储 缓存 前端开发
两种异步日志方案的介绍
两种异步日志方案的介绍
413 0
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
1453 1
|
网络安全 数据安全/隐私保护 网络虚拟化
2024年广东省网络系统管理样题第2套网络搭建部分
2024年广东省网络系统管理样题第2套网络搭建部分
2024年广东省网络系统管理样题第2套网络搭建部分
|
ice
Google Earth Engine ——Landsat 8 影像集合Collection详细介绍
Google Earth Engine ——Landsat 8 影像集合Collection详细介绍
319 2
|
Java 程序员 Windows
[笔记]Windows核心编程《十一》Windows线程池
[笔记]Windows核心编程《十一》Windows线程池
37011 4
[笔记]Windows核心编程《十一》Windows线程池
|
存储 前端开发 Linux
DPDK 的虚拟交换机框架 OvS 的基础知识
DPDK 的虚拟交换机框架 OvS 的基础知识
|
小程序 文件存储
【易售小程序项目】顶部导航栏和底部导航栏设置+iconfont图标引入
【易售小程序项目】顶部导航栏和底部导航栏设置+iconfont图标引入
488 0