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

3530. 有向无环图中合法拓扑排序的最大利润

3530. 有向无环图中合法拓扑排序的最大利润

给你一个由 n 个节点组成的有向无环图(DAG),节点编号从 0 到 n - 1,通过二维数组 edges 表示,其中 edges[i] = [ui, vi] 表示一条从节点 ui 指向节点 vi 的有向边。每个节点都有一个对应的 得分 ,由数组 score 给出,其中 score[i] 表示节点 i 的得分。

你需要以 有效的拓扑排序 顺序处理这些节点。每个节点在处理顺序中被分配一个编号从 1 开始的位置。

将每个节点的得分乘以其在拓扑排序中的位置,然后求和,得到的值称为 利润。

请返回在所有合法拓扑排序中可获得的 最大利润 。

拓扑排序 是一个对 DAG 中所有节点的线性排序,使得每条有向边 u → v 中,节点 u 都出现在 v 之前。

示例 1:

输入: n = 2, edges = [[0,1]], score = [2,3]

输出: 8

解释:

节点 1 依赖于节点 0,因此一个合法顺序是 [0, 1]。

节点 处理顺序 得分 乘数 利润计算
0 第 1 个 2 1 2 × 1 = 2
1 第 2 个 3 2 3 × 2 = 6
所有合法拓扑排序中可获得的最大总利润是 2 + 6 = 8。

示例 2:

输入: n = 3, edges = [[0,1],[0,2]], score = [1,6,3]

输出: 25

解释:

节点 1 和 2 都依赖于节点 0,因此最优的合法顺序是 [0, 2, 1]。

节点 处理顺序 得分 乘数 利润计算
0 第 1 个 1 1 1 × 1 = 1
2 第 2 个 3 2 3 × 2 = 6
1 第 3 个 6 3 6 × 3 = 18
所有合法拓扑排序中可获得的最大总利润是 1 + 6 + 18 = 25。

提示:

1 <= n == score.length <= 22
1 <= score[i] <= 105
0 <= edges.length <= n * (n - 1) / 2
edges[i] == [ui, vi] 表示一条从 ui 到 vi 的有向边。
0 <= ui, vi < n
ui != vi
输入图 保证 是一个 DAG。
不存在重复的边。

解答:1. 全空,排序+累和。

2. tuopu(S)=在已有集合S的状态下,剩余的点获得的最大利润。

S=U全集时,利润为0。

3. 下一个点的选取, j未被选择过S>>j&1==0,j的前缀都已经被选择过S|1<<j==S

class Solution { public: int maxProfit(int n, vector<vector<int>>& edges, vector<int>& score) { if(edges.empty()) { ranges::sort(score); int ans = 0; for (int i = 0; i < n; i++) { ans+=(i+1)*score[i]; } return ans; } vector<int> pre(n); for(auto& e: edges) { pre[e[1]] |= 1<<e[0]; } vector<int> tmp(1<<n); auto tuopu = [&](this auto&& tuopu, int s) -> int { if(s == 1<<n) { return 0; } int& res = tmp[s]; if (res) { return res; } int i = popcount((unsigned) s); for(int j=0;j<n;j++) { if(((s>>j)&1)==0 && ((s | pre[j]) == s)) { res = max(res, tuopu(s | 1<<j)+score[j]*(i+1)); } } return res; }; return tuopu(0); } };
http://www.jsqmd.com/news/523405/

相关文章:

  • 保姆级教程:PaddleOCR-VL-WEB环境配置与一键启动全流程
  • Tree-sitter实战:如何用Python绑定构建多语言语法树(含Java/Python配置指南)
  • 即插即用系列 | CVPR 2026 | SCFM:双路并行调制!空间-通道协同增强,高频细节精准补偿,性能轻量兼得! | 代码分享
  • LangChain 与 LangGraph:如何根据任务复杂度选择合适框架
  • CSDN博客创作:记录Qwen3智能字幕对齐系统踩坑与优化历程
  • 华硕笔记本性能调优终极指南:G-Helper轻量级控制工具完整解析
  • 工业级声纹识别系统实战指南:基于PyTorch的落地应用
  • PowerBI杜邦分析实战:5步搭建动态财务仪表盘(附完整DAX公式)
  • 3D打印的动态参数革命:从机械限制到智能调节
  • 吃透 SAP Gateway Service Administration:从 OData V4 服务组、发布机制到排错实践的一体化理解
  • macOS通过VirtualBox沙盒化运行aTrust,保障宿主系统网络环境纯净
  • OpenCode 进阶指南:如何用 AI 编码助手提升 10 倍开发效率
  • 2026年律师律所推广获客推荐:律所线上获客软件与服务器部署方案分析 - 十大品牌推荐
  • 多智能体 + RL 强强联合!AT-GRPO 让 LLM 协作能力暴涨
  • 解密高通相机HAL:CamX与CHI的协作机制及性能优化技巧
  • 计费结算系统中,多层防护体系来严防资损
  • 【IEEE 出版 | IEEE Xplore 、EI 检索】第二届智慧能源与控制工程国际学术会议(SECE 2026)
  • 2026年同城推广推荐:中小企业精准获客口碑服务商系统化评测指南 - 十大品牌推荐
  • 直接上干货。今天咱们玩点实际的——用MATLAB搞OFDM通信系统里的IQ不平衡仿真。这玩意儿在现实通信里能把人折腾得够呛,特别是用廉价射频前端的时候
  • CRM客户管理系统一年费用多少?CRM客户管理系统收费标准 - 纷享销客智能型CRM
  • 快速排序 (Quick Sort)
  • 5个最实用的VSLAM开源算法对比:从ORB-SLAM到DROID-SLAM,哪个更适合你的项目?
  • 2025-2026年十大麻将机品牌推荐:智能娱乐空间升级靠谱品牌选购指南 - 十大品牌推荐
  • ODConv (Omni-Dimensional Convolution):全维动态卷积,学习卷积核的四维注意力——YOLOv8 改进实战
  • 2026年十大麻将机品牌推荐:棋牌室商用高性价比品牌及用户口碑真实评价 - 十大品牌推荐
  • 基于Loki+Grafana的Docker容器日志监控实践指南
  • Step3-VL-10B多模态模型与Python爬虫实战:数据采集与智能分析
  • 主流模型调用(二)Open AI
  • 同城推广服务如何选择不踩坑?2026年靠谱推荐软件系统办公高效方案 - 十大品牌推荐
  • 2026年国内沙盘模型优质厂商:实力强、口碑好、靠谱可靠的专业选择 - 深度智识库