当前位置: 首页 > news >正文

搭配购买——并查集+01背包

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。

输出格式
一行,表示可以获得的最大价值。

数据范围
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

解析:

搭配的都要买,可以理解成将有关系的都放在一起,相当一个物品,要买一起买。

这样就可以转换成01背包问题,每个物品只能购买一次,在有限的钱的情况下,让买的物品的价值尽可能的大。

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e6+10;
int p[N];
int v[N],w[N];
int v1[N],w1[N];
int f[N];
bool vis[N];
int find(int x)
{if (x!=p[x]) p[x]=find(p[x]);return p[x];
}
signed main()
{int n,m,k;cin>>n>>m>>k;for (int i=1;i<=n;i++) p[i]=i;for (int i=1;i<=n;i++) cin>>v[i]>>w[i];for (int i=0;i<m;i++){int a,b;cin>>a>>b;int x=find(a),y=find(b);if (x!=y){v[y] +=v[x];w[y] +=w[x];p[x]=y;}}int cnt=0;for (int i=1;i<=n;i++){int x=find(i);if (!vis[x]){cnt++;v1[cnt]=v[x];w1[cnt]=w[x];vis[x]=1;}}for (int i=1;i<=cnt;i++)       //01背包最简化  //模板for (int j=k;j>=v1[i];j--)f[j]=max(f[j],f[j-v1[i]]+w1[i]);cout<<f[k];return 0;
}//发现可以简化一下代码,不需要开新的数组记录每个“新的物品”的价值和代价。#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e6+10;
int p[N];
int v[N],w[N];
int f[N];
int find(int x)
{if (x!=p[x]) p[x]=find(p[x]);return p[x];
}
signed main()
{int n,m,k;cin>>n>>m>>k;for (int i=1;i<=n;i++) p[i]=i;for (int i=1;i<=n;i++) cin>>v[i]>>w[i];for (int i=0;i<m;i++){int a,b;cin>>a>>b;int x=find(a),y=find(b);if (x!=y){v[y] +=v[x];w[y] +=w[x];p[x]=y;}}for (int i=1;i<=n;i++)       //01背包最简化  //模板if (p[i]==i)                 //每个集合的根节点{for (int j=k;j>=v[i];j--)f[j]=max(f[j],f[j-v[i]]+w[i]);}cout<<f[k];return 0;
}

相关文章:

搭配购买——并查集+01背包

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

JVM调优指令参数

常用命令查找文档站点&#xff1a;https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html -XX:PrintFlagsInitial 输出所有参数的名称和默认值&#xff0c;默认不包括Diagnostic和Experimental的参数。可以配合 -XX:UnlockDiagnosticVMOptions和-XX:UnlockEx…...

数据结构入门 — 队列

本文属于数据结构专栏文章&#xff0c;适合数据结构入门者学习&#xff0c;涵盖数据结构基础的知识和内容体系&#xff0c;文章在介绍数据结构时会配合上动图演示&#xff0c;方便初学者在学习数据结构时理解和学习&#xff0c;了解数据结构系列专栏点击下方链接。 博客主页&am…...

MongoDB - 安装

一、Docker安装MongoDB 1. 安装 安装版本: 7.0.0 docker run -itd --name mongodb -v C:\\data\\mongodb\\data:/data/db -p 27017:27017 mongo:7.0.0 --auth-v: 将容器目录/data/db映射到本地C:\\data\\mongodb\\data目录&#xff0c;防止容器删除数据丢失-p: 端口映射--aut…...

Qt应用开发(基础篇)——颜色选择器 QColorDialog

一、前言 QColorDialog类继承于QDialog&#xff0c;是一个设计用来选择颜色的对话框部件。 对话框窗口 QDialog QColorDialog颜色选择器一般用来让用户选择颜色&#xff0c;比如画图工具中选择画笔的颜色、刷子的颜色等。你可以使用静态函数QColorDialog::getColor()直接显示对…...

vscode 清除全部的console.log

在放页面的大文件夹view上面右键点击在文件夹中查找 console.log.*$ 注意&#xff1a;要选择使用正则匹配 替换为 " " (空字符串)...

UG\NX CAM二次开发 插入工序 UF_OPER_create

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 插入工序 UF_OPER_create 效果: 代码: void MyClass::do_it() {tag_t setup_tag=NULL_TAG;UF_SETUP_ask_setup(&setup_tag);if (setup_tag==NULL_TAG){uc1601("请先初始化加工环境…...

C++指针、指针函数、函数指针、类指针

1、指针变量 #include <iostream>using namespace std;int main () {int var 20; // 实际变量的声明int *ip; // 指针变量的声明ip &var; // 在指针变量中存储 var 的地址cout << "Value of var variable: ";cout << var …...

图:最短路径问题(BFS算法,Dijkstra算法,Floyd算法)

1 .单源最短路径 1.BFS算法(无权图) 使用广度优先遍历实现一个顶点到达其他所有顶点的最短路径。 注:无权图可以视为一种特殊的带权图&#xff0c;只是每条边的权值都为1。 1.算法思路&#xff1a; 定义一个数组存储每个结点与当前的结点的最短距离&#xff0c;定义一个数组…...

栈和队列篇

目录 一、栈 1.栈的概念及结构 1.1栈的概念 1.2栈的结构示意图 2.栈的实现 2.1支持动态增长的栈的结构 2.2压栈&#xff08;入栈&#xff09; 2.3出栈 2.4支持动态增长的栈的代码实现 二、队列 1.队列的概念及结构 1.1队列的概念 1.2队列的结构示意图 2.队列的实…...

分享一个vue-slot插槽使用场景

需求再现 <el-table-column align"center" label"状态" prop"mitStatus" show-overflow-tooltip />在这里&#xff0c;我想对于状态进行一个三目判断&#xff0c;如果为0那就是进行中&#xff0c;否则就是已完成&#xff0c;期初我是这样写…...

Qt应用开发(基础篇)——进度对话框 QProgressDialog

一、前言 QProgressDialog类继承于QDialog&#xff0c;是Qt设计用来反馈进度的对话框。 对话框QDialog QProgressDialog提供了一个进度条&#xff0c;表示当前程序的某操作的执行进度&#xff0c;让用户知道操作依旧在激活状态&#xff0c;配合按钮&#xff0c;用户就可以随时终…...

基于SpringBoot2的后台业务管理系统

概述 SpringBoot-Plus 是一个适合大系统拆分成小系统的架构&#xff0c;java快速开发平台&#xff0c;或者是一个微服务系统。其中加入了Thymeleaf数据模板语言代替了之前的JSP页面方式。页面展示采用Layui前端框架&#xff0c;包含了用户管理&#xff0c;角色管理&#xff0c…...

Jmeter(三十):并发测试(设置集合点)

集合点:让所有请求在不满足条件的时候处于等待状态。 如:我集合点设置为50,那么不满足50个请求的时候,这些请求都会集合在一起,处于等待状态,当达到50的时候,就一起执行。从而达到并发的效果。 那么Jmeter中可以通过同步定时器 Synchronizing Timer 来完成。 Number …...

Flink的checkpoint是怎么实现的?

分析&回答 Checkpoint介绍 Checkpoint容错机制是Flink可靠性的基石,可以保证Flink集群在某个算子因为某些原因(如 异常退出)出现故障时,能够将整个应用流图的状态恢复到故障之前的某一状态,保证应用流图状态的一致性。Flink的Checkpoint机制原理来自“Chandy-Lamport alg…...

ubuntu上安装nginx

这篇文章主要介绍怎么在ubuntu上安装nginx服务器&#xff0c;并进行一些简单的配置。 第一步&#xff1a;准备好一台ubuntu操作系统的虚拟机 注意&#xff1a;如果你还没有安装好ubuntu&#xff0c;个人推荐阅读以下文章完成unbutu安装&#xff0c;vm的版本不用刻意安装文章中…...

9. 微积分 - 导数

文章目录 导数求导实例代码演示:迭代法求解二次函数最小值阶Hi, 大家好。我是茶桁。 我们终于结束了极限和连续的折磨,开启了新的篇章。 不过不要以为我们后面的就会很容易,只是相对来说, 没有那么绕而已。 那么,我们今天开始学习「导数」。 导数 在之前的导论,也就是…...

滑动窗口系列1-达标子数组

#达标子数组# 求达标子数组的数量 * 题目&#xff1a;给定一个数组&#xff0c;求满足子数组中最大值-最小值小于等于某个数的子数组的数量 * 例如[0,1,2,3]中求子数组中最大值-最小值小于等于 2的子数组的数量 * 结果为9,因为满足条件的只有[0,0] [0,1] [0,2] [1,1] [1,2] [1…...

电视显示技术及价格成本对比(2023年)

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/zaibeijixing/article/details/132461068 ———————————————— 截止到2023年&#xff…...

浅谈 Pytest+HttpRunner 如何展开接口测试!

软件测试有多种多样的方法和技术&#xff0c;可以从不同角度对它们进行分类。其中&#xff0c;根据软件生命周期&#xff0c;针对不同的测试对象与目标&#xff0c;可将测试过程分为 4 个阶段&#xff1a;单元测试、集成测试、系统测试和验收测试。本文着重介绍了如何借用 pyte…...

5分钟搞定RetroArch缩略图:从黑屏到完美游戏封面的全攻略

5分钟搞定RetroArch缩略图&#xff1a;从黑屏到完美游戏封面的全攻略 【免费下载链接】RetroArch Cross-platform, sophisticated frontend for the libretro API. Licensed GPLv3. 项目地址: https://gitcode.com/GitHub_Trending/re/RetroArch 还记得打开RetroArch游戏…...

FlexRay帧格式拆解:从Header到Trailer,手把手教你读懂汽车总线的‘数据包’

FlexRay帧格式实战解析&#xff1a;像拆解网络包一样掌握汽车总线通信 在汽车电子系统开发中&#xff0c;理解总线协议就像网络工程师需要精通TCP/IP一样重要。FlexRay作为高性能车载网络的核心协议&#xff0c;其帧格式设计既体现了汽车电子对确定性的严苛要求&#xff0c;又融…...

Java泛型中的List

本文将详细回答java泛型中的listt extends base>使用问题。 在java中&#xff0c;泛型提供了强大的类型安全机制&#xff0c;但其一些特点也容易引起混淆&#xff0c;如listt extends base>开发者经常感到困难。假设sub是base的子类&#xff1a;public class base { }pub…...

从FamNet到通用计数:小样本学习如何让AI“数”遍万物

1. 小样本计数的革命&#xff1a;从专用工具到通用能力 记得我第一次接触物体计数任务时&#xff0c;用的还是专门针对人群计数的模型。当时为了统计商场人流量&#xff0c;不得不专门训练一个模型。后来遇到统计停车场的需求&#xff0c;又要重新收集数据训练新模型。这种&quo…...

告别Transformer的O(n²)烦恼:手把手带你用Mamba-2.0搭建一个长文本摘要模型

突破长文本处理瓶颈&#xff1a;基于Mamba-2.0的高效摘要系统实战指南 在当今信息爆炸的时代&#xff0c;我们每天都被海量文本内容包围——从学术论文、技术文档到商业报告&#xff0c;这些长文本的有效处理已成为知识工作者面临的核心挑战。传统基于Transformer的摘要系统虽然…...

【电气数据】电力网络充电站定价策略数据集

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Bioconductor注释包全解析:从缩写规则到实战应用

1. Bioconductor注释包入门指南 第一次接触Bioconductor注释包时&#xff0c;我完全被那些奇怪的缩写搞懵了。Hs、Mm、Rn这些看起来像密码的字母组合&#xff0c;其实是生物信息学分析中最常用的工具标识。就像医生需要熟悉药品缩写一样&#xff0c;搞生物数据分析也得掌握这套…...

告别手动截图!用Python脚本从ROS bag文件里精准提取带时间戳的图片(附完整代码)

告别手动截图&#xff01;用Python脚本从ROS bag文件里精准提取带时间戳的图片&#xff08;附完整代码&#xff09; 在计算机视觉和机器人研究中&#xff0c;从ROS bag文件中高效提取带时间戳的图像数据是构建数据集的关键步骤。传统方法依赖ROS自带工具&#xff0c;但常面临提…...

多平台网盘直链解析工具:技术原理与应用指南

多平台网盘直链解析工具&#xff1a;技术原理与应用指南 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改&#xff08;改自6.1.4版本&#xff09; &#xff0c;自用&#xff0c;去推广&#xff0c;无…...

3个消息保护痛点解决方案:RevokeMsgPatcher本地消息留存技术全解析

3个消息保护痛点解决方案&#xff1a;RevokeMsgPatcher本地消息留存技术全解析 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https:…...