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

东方博宜OJ 1928:采购礼品 ← 有依赖的背包 + 并查集

​【题目来源】
https://oj.czos.cn/p/1928

【题目描述】
王老师来到商店为同学们采购礼品。
这家店有 n 种礼品(编号是 1~n),每种礼品只有 1 件。老板为了促销,对礼品进行搭配销售,有关联性的礼品必须都要采购(奇怪的规定),比如 1 号礼品和 3 号礼品搭配了,3 号和 8 号礼品搭配了,那么王老师想要买 1 号礼品的话,就需要把 3 号和 8 号礼品都买了。
现给定每种礼品的价钱和价值,请问在有限的钱 w 的情况下,能够买到礼品的最大价值是多少?

【输入格式】
第一行输入三个整数,n,m,w,表示有 n 种礼品,m 个搭配和你现有的钱的数目 w。
第二行至 n+1 行,每行有两个整数,c、d,表示第 i 种礼品的价钱和价值。(1≤c,d≤10^5)
第 n+2 至 n+1+m 行,每行有两个整数,u、v,表示 u 号礼品和 v 号礼品是有关联的,已经形成搭配销售的关系。

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

【输入样例】
5 3 10
3 10
3 10
3 10
5 100
10 1
1 3
3 2
4 2​​​​​​​

【输出样例】
1

【数据范围】
1≤n,w≤10^4,0≤m≤5×10^3。​​​​​​​

【算法分析】
● 并查集:https://blog.csdn.net/hnjzsyjyj/article/details/146948171
● 有依赖的背包(树形背包)核心是物品间存在选子必选父的单向依赖关系,依赖结构通常为森林或多叉树,主流解法为树形 DP 结合分组背包自底向上合并;若题目中是双向强依赖、互相绑定的物品组(选其一必全选),则可先用并查集将连通块缩为超级物品,再套用普通 01 背包求解,两种思路对应不同依赖模型,共同构成完整解法体系。

【算法代码】

#include <bits/stdc++.h>
using namespace std;const int N=1e4+5;
int vol[N],val[N],f[N];
int pre[N];
int n,m,V;int find(int x) {if(x!=pre[x]) pre[x]=find(pre[x]);return pre[x];
}void merge(int x,int y) {int a=find(x);int b=find(y);if(a!=b) pre[a]=b;
}int main() {cin>>n>>m>>V;for(int i=1; i<=n; i++) {cin>>vol[i]>>val[i];pre[i]=i;}for(int i=1; i<=m; i++) {int x,y;cin>>x>>y;merge(x,y);}for(int i=1; i<=n; i++) {if(pre[i]!=i) {vol[find(i)]+=vol[i];val[find(i)]+=val[i];vol[i]=0;val[i]=0;}}for(int i=1; i<=n; i++) { //0-1 bagfor(int j=V; j>=vol[i]; j--) {f[j]=max(f[j],f[j-vol[i]]+val[i]);}}cout<<f[V]<<endl;return 0;
}/*
in:
5 3 10
3 10
3 10
3 10
5 100
10 1
1 3
3 2
4 2out:
1
*/

 

 

【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/146948171
https://mp.weixin.qq.com/s/EOk7vFnpusJism2Md4Inrw
https://blog.csdn.net/chenminggui123/article/details/141400595

 

http://www.jsqmd.com/news/556970/

相关文章:

  • JWT令牌生成与验证详细实现教程
  • Lombok注解失效排查指南:从依赖冲突到插件化解决方案
  • 化妆镜前扮精致,脊柱 “被扯得变形错位”!
  • Activiti的act_ru_identitylink类型解析与实战应用
  • ADASYN实战:用Python解决信用卡欺诈检测中的样本不平衡问题(附完整代码)
  • Dom4j解析XML时遇到JaxenException?5分钟搞定依赖配置(附Maven代码)
  • 4步精通OpenCore EFI制作:OpCore-Simplify智能配置引擎全解析
  • 嵌入式系统安全攻防实战:从应用白名单到固件完整性校验的深度解析
  • 告别环境冲突:手把手在Ubuntu服务器上为你的PyTorch项目搭建专属Miniconda环境
  • 从Chemometrics期刊到你的实验桌:深入解读连续投影算法(SPA)的20年应用与实战调优
  • 智能风扇管家:FanControl如何让你的电脑安静又高效
  • 避坑指南:Linux安装Clion时容易忽略的权限问题与目录规划建议
  • 从IPython和REPL中找灵感:用prompt_toolkit打造你的专属Python交互式环境
  • HsMod终极指南:如何免费提升炉石传说游戏体验的完整教程
  • 操作系统任务调度案例分析
  • STM32实战:为小米CyberGear/灵足电机构建机械限位零点与位置模式正弦轨迹
  • Realistic Vision V5.1高级控制:OpenCV与图像后处理流水线
  • 遥感影像重采样选‘near’还是‘bilinear’?实测gdalwarp五种算法效果与性能对比
  • Android 12 SurfaceFlinger 事务处理全流程拆解:从 queueTransaction 到 commitTransaction 的幕后故事
  • GraphRAG大揭秘:微软如何用知识图谱让AI问答更精准,效率翻倍!
  • 大模型越狱模板数据集大盘点:从DAN到WildJailbreak的5大来源解析
  • 如何高效解密QMC音频:qmc-decoder完整实战指南
  • 别只调光敏电阻了!聊聊51单片机ADC0804采样的那些‘玄学’与稳定之道
  • 对于对话中的反讽识别,OpenClaw 的模型是否结合了语调特征?
  • 3分钟搞定iOS 15-16设备激活锁解除:applera1n终极指南
  • GitHub与GitLab中fork操作的高效实践指南
  • 5分钟集成Android条码扫描:Barcode Scanner库完全指南
  • Joy-Con Toolkit:深度定制任天堂手柄的专业级开源解决方案
  • 从频谱仪读数到系统性能报告:通信工程师必备的Eb/N0估算实战指南
  • 选题毫无头绪?师兄推荐这几个AI写作辅助平台