当前位置: 首页 > 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.cnnetsun.cn/news/1439034.html

相关文章:

  • RVC模型作品案例集:从网红音到专业配音的华丽转变
  • 工业级声纹识别系统实战指南:基于PyTorch的落地应用
  • 华硕笔记本性能调优终极指南:G-Helper轻量级控制工具完整解析
  • 代码随想录一刷记录Day5——leetcode 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
  • Recast细节网格:找回丢失的高度
  • 【Docker】国内镜像源配置全攻略:阿里云加速实战
  • 计算机毕业设计springboot旅游平台 基于SpringBoot的文旅信息服务平台设计与实现 基于SpringBoot的智慧旅行综合服务系统设计与实现
  • 392. 判断子序列
  • 避坑指南:Open3D点云显示卡顿?试试这5个性能优化技巧(Python版)
  • 2026年3月22日技术资讯洞察:数据库优化进入预测时代,网络安全威胁全面升级
  • 能效比的新巅峰:骁龙X Elite与Intel Lunar Lake的正面交锋
  • 婚礼请柬与订婚宴设计素材合集:涵盖中式复古、简约西式及电子海报格式
  • STM32H743上跑ThreadX,CubeMX配置完别急着编译,这3个坑我帮你踩过了
  • ESP32Time库详解:RTC时间管理与嵌入式本地化实践
  • keil将ANSI编码模式改为UTF-8编码模式方法
  • 第1章 网络爬虫-1.1 网络爬虫简介
  • 机器视觉检测visionpro算法写的点胶胶路断胶检测,很具有实用性,做相关点胶设备检测的伙伴...
  • Science Advances发表软体机器人操控最新成果
  • 面向对象(下)
  • MySQL连接SSL协议版本不匹配:javax.net.ssl.SSLException解决方案大全
  • 静态模型失效与动态建模崛起:仓储空间智能化的关键转折点—— 融合镜像视界多视角视频融合、无感定位与行为认知的空间计算体系
  • 最好用的文档解密大师——文档密码恢复大师
  • 他只是累了《盗梦空间》终局
  • 2026 前后端联调提效神器:基于 Cloudflare 的 JSON Schema 自动生成工具(纯前端实现 + 多规范兼容)
  • Codex 安装和配置
  • STM32裸机录音系统:SPI分时复用与双缓冲音频流设计
  • AQS 原理主线:state、CLH 队列、独占/共享与实战排查
  • 我让AI开发一个完整项目,结果离谱了(全流程实测)
  • 基于 MIPS 架构的跨境充电桩链路检测与底层自愈实现
  • Step3-VL-10B-Base多模态开发环境搭建:Anaconda配置详解