【算法】搭配购买(01背包,加权并查集)

news/2025/1/13 11:47:23/

题目 

Joe觉得云朵很美,决定去山上的商店买一些云朵。

商店里有 n 朵云,云朵被编号为 1,2,…,n,并且每朵云都有一个价值。

但是商店老板跟他说,一些云朵要搭配来买才好,所以买一朵云则与这朵云有搭配的云都要买。

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

输入格式

第 11 行包含三个整数 n,m,w,表示有 n 朵云,m 个搭配,Joe有 w 的钱。

第 2∼n+1行,每行两个整数 ci,di 表示 i 朵云的价钱和价值。

第 n+2∼n+1+m 行,每行两个整数 ui,vi,表示买 ui 就必须买 vi,同理,如果买 vi 就必须买 ui。

输出格式

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

数据范围

1≤n≤10000
0≤m≤5000
1≤w≤10000
1≤ci≤5000
1≤di≤100
1≤ui,vi≤n

输入样例:
5 3 10
3 10
3 10
3 10
5 100
10 1
1 3
3 2
4 2
输出样例:
1

思路

        1、初始状态下,我们可以将每一件物品单独放到一个集合中,如果购买物品1就要购买物品2则将1,2放入同一个集合中,并且集合的价值等于集合内所有的物品价值之和。如果要买一个物品,则需要购买该物品所属集合的全部物品。(并查集)

        2、使用01背包进行处理数据,使得使用给定的金钱买到的物品价值之和最大。(01背包)

01背包的原理在我之前的文章讲述过。

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 10010;
int n,m,vol;
int v[N],w[N];
int p[N];
int f[N];int find(int x)
{if(p[x] != x) p[x] = find(p[x]);return p[x];
}int main()
{cin >> n >> m >> vol;for(int i = 1; i <= n; i ++) cin >> v[i] >> w[i];for(int i = 0; i <= n; i ++) p[i] = i;for(int i = 0; i < m; i ++){int a,b;cin >> a >> b;int pa = find(a),pb = find(b);if(pa != pb){p[pa] = pb;v[pb] += v[pa];w[pb] += w[pa];}}for(int i = 1; i <= n; i ++){if(p[i] == i){for(int j = vol; j - v[i] >= 0; j --)f[j] = max(f[j],f[j - v[i]] + w[i]);}}cout << f[vol] << endl;return 0;}


http://www.ppmy.cn/news/1236853.html

相关文章

Vue环境的搭建

1.Vue开发的两种方式 &#xff08;1&#xff09;核心包传统开发模式 基于html/css/js文件&#xff0c;直接引入和辛堡&#xff0c;开发Vue。 &#xff08;2&#xff09;工程化开发模式&#xff1a; 主要是基于构建工具&#xff08;例如,webpack&#xff09;的环境中开发Vue…

4-Docker命令之docker info

后续为大家逐个讲解一下docker常用命令及其相关用法。docker常用命令查看如下: [root@centos79 ~]# docker --helpUsage: docker [OPTIONS] COMMANDA self-sufficient runtime for containersCommon Commands:run Create and run a new container from an imageexec…

opencv 存储bgr格式/同理可类推yuv

需求背景 开发rk3588 音视频硬件编解码&#xff0c;然后看见他的输入文件格式。。 只能是裸的文件。不能是压缩过的。就是不能是jpg/png这种格式&#xff0c;只能是以下的图像/视频 的存储格式.那么我没有这个格式的&#xff0c;以前hi3559的bgr格式和他要的也不太一致&#x…

python内置模块binascii,二进制数据和ASCII字符串之间进行转换

一、简介 binascii是Python标准库中的一个模块&#xff0c;提供了在二进制数据和ASCII字符串之间进行转换的功能。它包含了一些用于处理二进制数据的函数&#xff0c;可以进行二进制数据的编码、解码和转换。 二、方法 binascii.unhexlify(hexstr)&#xff1a;将十六进制表示…

css实现水波纹效果

css实现水波纹效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><styl…

CentOS 7 使用异步网络框架Libevent

CentOS 7 安装Libevent库 libevent github地址&#xff1a;https://github.com/libevent/libevent 步骤1&#xff1a;首先&#xff0c;你需要下载libevent的源代码。你可以从github或者源代码官方网站下载。并上传至/usr/local/source_code/ 步骤2&#xff1a;下载完成后&…

ARCore:在Android上构建令人惊叹的增强现实体验

ARCore&#xff1a;在Android上构建令人惊叹的增强现实体验 一、 AR 介绍1.1 AR技术简介1.2 AR技术原理1.3 AR技术应用领域 二、Google的增强现实平台ARCore2.1 ARCore简介2.2 ARCore API介绍2.3 ARCore API使用示例 三、总结 一、 AR 介绍 增强现实 Augmented Reality&#x…

嵌入式系统在工业自动化中的应用

嵌入式系统在工业自动化中的应用非常广泛&#xff0c;它们通过集成控制和实时响应能力&#xff0c;实现了生产线的自动化、智能化和高效化。以下将详细介绍嵌入式系统在工业自动化中的几个重要应用领域&#xff0c;并提供一些示例代码。 1. PLC&#xff08;可编程逻辑控制器&a…