{ "data": { "question": { "questionId": "3826", "questionFrontendId": "3530", "categoryTitle": "Algorithms", "boundTopicId": 3662345, "title": "Maximum Profit from Valid Topological Order in DAG", "titleSlug": "maximum-profit-from-valid-topological-order-in-dag", "content": "
You are given a Directed Acyclic Graph (DAG) with n
nodes labeled from 0
to n - 1
, represented by a 2D array edges
, where edges[i] = [ui, vi]
indicates a directed edge from node ui
to vi
. Each node has an associated score given in an array score
, where score[i]
represents the score of node i
.
You must process the nodes in a valid topological order. Each node is assigned a 1-based position in the processing order.
\n\nThe profit is calculated by summing up the product of each node's score and its position in the ordering.
\n\nReturn the maximum possible profit achievable with an optimal topological order.
\n\nA topological order of a DAG is a linear ordering of its nodes such that for every directed edge u → v
, node u
comes before v
in the ordering.
\n
Example 1:
\n\nInput: n = 2, edges = [[0,1]], score = [2,3]
\n\nOutput: 8
\n\nExplanation:
\n\nNode 1 depends on node 0, so a valid order is [0, 1]
.
Node | \n\t\t\tProcessing Order | \n\t\t\tScore | \n\t\t\tMultiplier | \n\t\t\tProfit Calculation | \n\t\t
---|---|---|---|---|
0 | \n\t\t\t1st | \n\t\t\t2 | \n\t\t\t1 | \n\t\t\t2 × 1 = 2 | \n\t\t
1 | \n\t\t\t2nd | \n\t\t\t3 | \n\t\t\t2 | \n\t\t\t3 × 2 = 6 | \n\t\t
The maximum total profit achievable over all valid topological orders is 2 + 6 = 8
.
Example 2:
\n\nInput: n = 3, edges = [[0,1],[0,2]], score = [1,6,3]
\n\nOutput: 25
\n\nExplanation:
\n\nNodes 1 and 2 depend on node 0, so the most optimal valid order is [0, 2, 1]
.
Node | \n\t\t\tProcessing Order | \n\t\t\tScore | \n\t\t\tMultiplier | \n\t\t\tProfit Calculation | \n\t\t
---|---|---|---|---|
0 | \n\t\t\t1st | \n\t\t\t1 | \n\t\t\t1 | \n\t\t\t1 × 1 = 1 | \n\t\t
2 | \n\t\t\t2nd | \n\t\t\t3 | \n\t\t\t2 | \n\t\t\t3 × 2 = 6 | \n\t\t
1 | \n\t\t\t3rd | \n\t\t\t6 | \n\t\t\t3 | \n\t\t\t6 × 3 = 18 | \n\t\t
The maximum total profit achievable over all valid topological orders is 1 + 6 + 18 = 25
.
\n
Constraints:
\n\n1 <= n == score.length <= 22
1 <= score[i] <= 105
0 <= edges.length <= n * (n - 1) / 2
edges[i] == [ui, vi]
denotes a directed edge from ui
to vi
.0 <= ui, vi < n
ui != vi
给你一个由 n
个节点组成的有向无环图(DAG),节点编号从 0
到 n - 1
,通过二维数组 edges
表示,其中 edges[i] = [ui, vi]
表示一条从节点 ui
指向节点 vi
的有向边。每个节点都有一个对应的 得分 ,由数组 score
给出,其中 score[i]
表示节点 i
的得分。
你需要以 有效的拓扑排序 顺序处理这些节点。每个节点在处理顺序中被分配一个编号从 1 开始的位置。
\n\n将每个节点的得分乘以其在拓扑排序中的位置,然后求和,得到的值称为 利润。
\n\n请返回在所有合法拓扑排序中可获得的 最大利润 。
\n\n拓扑排序 是一个对 DAG 中所有节点的线性排序,使得每条有向边 u → v
中,节点 u
都出现在 v
之前。
\n\n
示例 1:
\n\n输入: n = 2, edges = [[0,1]], score = [2,3]
\n\n输出: 8
\n\n解释:
\n\n节点 1 依赖于节点 0,因此一个合法顺序是 [0, 1]
。
节点 | \n\t\t\t处理顺序 | \n\t\t\t得分 | \n\t\t\t乘数 | \n\t\t\t利润计算 | \n\t\t
---|---|---|---|---|
0 | \n\t\t\t第 1 个 | \n\t\t\t2 | \n\t\t\t1 | \n\t\t\t2 × 1 = 2 | \n\t\t
1 | \n\t\t\t第 2 个 | \n\t\t\t3 | \n\t\t\t2 | \n\t\t\t3 × 2 = 6 | \n\t\t
所有合法拓扑排序中可获得的最大总利润是 2 + 6 = 8
。
示例 2:
\n\n输入: n = 3, edges = [[0,1],[0,2]], score = [1,6,3]
\n\n输出: 25
\n\n解释:
\n\n节点 1 和 2 都依赖于节点 0,因此最优的合法顺序是 [0, 2, 1]
。
节点 | \n\t\t\t处理顺序 | \n\t\t\t得分 | \n\t\t\t乘数 | \n\t\t\t利润计算 | \n\t\t
---|---|---|---|---|
0 | \n\t\t\t第 1 个 | \n\t\t\t1 | \n\t\t\t1 | \n\t\t\t1 × 1 = 1 | \n\t\t
2 | \n\t\t\t第 2 个 | \n\t\t\t3 | \n\t\t\t2 | \n\t\t\t3 × 2 = 6 | \n\t\t
1 | \n\t\t\t第 3 个 | \n\t\t\t6 | \n\t\t\t3 | \n\t\t\t6 × 3 = 18 | \n\t\t
所有合法拓扑排序中可获得的最大总利润是 1 + 6 + 18 = 25
。
\n\n
提示:
\n\n1 <= 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
mask
= (bits such that if a bit is set, it means the corresponding node is removed).",
"Try maintaining the degrees
across function calls."
],
"solution": null,
"status": null,
"sampleTestCase": "2\n[[0,1]]\n[2,3]",
"metaData": "{\n \"name\": \"maxProfit\",\n \"params\": [\n {\n \"name\": \"n\",\n \"type\": \"integer\"\n },\n {\n \"type\": \"integer[][]\",\n \"name\": \"edges\"\n },\n {\n \"type\": \"integer[]\",\n \"name\": \"score\"\n }\n ],\n \"return\": {\n \"type\": \"integer\"\n }\n}",
"judgerAvailable": true,
"judgeType": "large",
"mysqlSchemas": [],
"enableRunCode": true,
"envInfo": "{\"cpp\":[\"C++\",\"\\u7248\\u672c\\uff1a \\u7f16\\u8bd1\\u65f6\\uff0c\\u5c06\\u4f1a\\u91c7\\u7528 \\u4e3a\\u4e86\\u4f7f\\u7528\\u65b9\\u4fbf\\uff0c\\u5927\\u90e8\\u5206\\u6807\\u51c6\\u5e93\\u7684\\u5934\\u6587\\u4ef6\\u5df2\\u7ecf\\u88ab\\u81ea\\u52a8\\u5bfc\\u5165\\u3002<\\/p>\"],\"java\":[\"Java\",\" \\u7248\\u672c\\uff1a \\u4e3a\\u4e86\\u65b9\\u4fbf\\u8d77\\u89c1\\uff0c\\u5927\\u90e8\\u5206\\u6807\\u51c6\\u5e93\\u7684\\u5934\\u6587\\u4ef6\\u5df2\\u88ab\\u5bfc\\u5165\\u3002<\\/p>\\r\\n\\r\\n \\u5305\\u542b Pair \\u7c7b: https:\\/\\/docs.oracle.com\\/javase\\/8\\/javafx\\/api\\/javafx\\/util\\/Pair.html <\\/p>\"],\"python\":[\"Python\",\" \\u7248\\u672c\\uff1a \\u4e3a\\u4e86\\u65b9\\u4fbf\\u8d77\\u89c1\\uff0c\\u5927\\u90e8\\u5206\\u5e38\\u7528\\u5e93\\u5df2\\u7ecf\\u88ab\\u81ea\\u52a8 \\u5bfc\\u5165\\uff0c\\u5982\\uff1aarray<\\/a>, bisect<\\/a>, collections<\\/a>\\u3002\\u5982\\u679c\\u60a8\\u9700\\u8981\\u4f7f\\u7528\\u5176\\u4ed6\\u5e93\\u51fd\\u6570\\uff0c\\u8bf7\\u81ea\\u884c\\u5bfc\\u5165\\u3002<\\/p>\\r\\n\\r\\n \\u6ce8\\u610f Python 2.7 \\u5df2\\u4e0d\\u518d\\u7ef4\\u62a4<\\/a>\\u3002 \\u5982\\u60f3\\u4f7f\\u7528\\u6700\\u65b0\\u7248\\u7684Python\\uff0c\\u8bf7\\u9009\\u62e9Python 3\\u3002<\\/p>\"],\"c\":[\"C\",\" \\u7248\\u672c\\uff1a \\u7f16\\u8bd1\\u65f6\\uff0c\\u5c06\\u4f1a\\u91c7\\u7528 \\u4e3a\\u4e86\\u4f7f\\u7528\\u65b9\\u4fbf\\uff0c\\u5927\\u90e8\\u5206\\u6807\\u51c6\\u5e93\\u7684\\u5934\\u6587\\u4ef6\\u5df2\\u7ecf\\u88ab\\u81ea\\u52a8\\u5bfc\\u5165\\u3002<\\/p>\\r\\n\\r\\n \\u5982\\u60f3\\u4f7f\\u7528\\u54c8\\u5e0c\\u8868\\u8fd0\\u7b97, \\u60a8\\u53ef\\u4ee5\\u4f7f\\u7528 uthash<\\/a>\\u3002 \\\"uthash.h\\\"\\u5df2\\u7ecf\\u9ed8\\u8ba4\\u88ab\\u5bfc\\u5165\\u3002\\u8bf7\\u770b\\u5982\\u4e0b\\u793a\\u4f8b:<\\/p>\\r\\n\\r\\n 1. \\u5f80\\u54c8\\u5e0c\\u8868\\u4e2d\\u6dfb\\u52a0\\u4e00\\u4e2a\\u5bf9\\u8c61\\uff1a<\\/b>\\r\\n 2. \\u5728\\u54c8\\u5e0c\\u8868\\u4e2d\\u67e5\\u627e\\u4e00\\u4e2a\\u5bf9\\u8c61\\uff1a<\\/b>\\r\\n 3. \\u4ece\\u54c8\\u5e0c\\u8868\\u4e2d\\u5220\\u9664\\u4e00\\u4e2a\\u5bf9\\u8c61\\uff1a<\\/b>\\r\\n C# 13<\\/a> \\u8fd0\\u884c\\u5728 .NET 9 \\u4e0a<\\/p>\"],\"javascript\":[\"JavaScript\",\" \\u7248\\u672c\\uff1a \\u60a8\\u7684\\u4ee3\\u7801\\u5728\\u6267\\u884c\\u65f6\\u5c06\\u5e26\\u4e0a lodash.js<\\/a> \\u5e93\\u5df2\\u7ecf\\u9ed8\\u8ba4\\u88ab\\u5305\\u542b\\u3002<\\/p>\\r\\n\\r\\n \\u5982\\u9700\\u4f7f\\u7528\\u961f\\u5217\\/\\u4f18\\u5148\\u961f\\u5217\\uff0c\\u60a8\\u53ef\\u4f7f\\u7528 datastructures-js\\/priority-queue@6.3.2<\\/a>\\uff0c datastructures-js\\/queue@4.2.3<\\/a> \\u4ee5\\u53ca datastructures-js\\/deque@1.0.4<\\/a>\\u3002<\\/p>\"],\"ruby\":[\"Ruby\",\" \\u4f7f\\u7528 \\u4e00\\u4e9b\\u5e38\\u7528\\u7684\\u6570\\u636e\\u7ed3\\u6784\\u5df2\\u5728 Algorithms \\u6a21\\u5757\\u4e2d\\u63d0\\u4f9b\\uff1ahttps:\\/\\/www.rubydoc.info\\/github\\/kanwei\\/algorithms\\/Algorithms<\\/p>\"],\"swift\":[\"Swift\",\" \\u7248\\u672c\\uff1a \\u60a8\\u53ef\\u4ee5\\u4f7f\\u7528 swift-algorithms 1.2.0<\\/a>\\uff0cswift-collections 1.1.4<\\/a> \\u548c swift-numerics 1.0.2<\\/a><\\/p>\\r\\n\\r\\n \\u6211\\u4eec\\u901a\\u5e38\\u4fdd\\u8bc1\\u66f4\\u65b0\\u5230 Apple\\u653e\\u51fa\\u7684\\u6700\\u65b0\\u7248Swift<\\/a>\\u3002\\u5982\\u679c\\u60a8\\u53d1\\u73b0Swift\\u4e0d\\u662f\\u6700\\u65b0\\u7248\\u7684\\uff0c\\u8bf7\\u8054\\u7cfb\\u6211\\u4eec\\uff01\\u6211\\u4eec\\u5c06\\u5c3d\\u5feb\\u66f4\\u65b0\\u3002<\\/p>\"],\"golang\":[\"Go\",\" \\u7248\\u672c\\uff1a \\u652f\\u6301 https:\\/\\/pkg.go.dev\\/github.com\\/emirpasic\\/gods@v1.18.1<\\/a> \\u548c https:\\/\\/pkg.go.dev\\/github.com\\/emirpasic\\/gods\\/v2@v2.0.0-alpha<\\/a> \\u7b2c\\u4e09\\u65b9\\u5e93\\u3002<\\/p>\"],\"python3\":[\"Python3\",\" \\u7248\\u672c\\uff1a \\u4e3a\\u4e86\\u65b9\\u4fbf\\u8d77\\u89c1\\uff0c\\u5927\\u90e8\\u5206\\u5e38\\u7528\\u5e93\\u5df2\\u7ecf\\u88ab\\u81ea\\u52a8 \\u5bfc\\u5165\\uff0c\\u5982array<\\/a>, bisect<\\/a>, collections<\\/a>\\u3002 \\u5982\\u679c\\u60a8\\u9700\\u8981\\u4f7f\\u7528\\u5176\\u4ed6\\u5e93\\u51fd\\u6570\\uff0c\\u8bf7\\u81ea\\u884c\\u5bfc\\u5165\\u3002<\\/p>\\r\\n\\r\\n \\u5982\\u9700\\u4f7f\\u7528 Map\\/TreeMap \\u6570\\u636e\\u7ed3\\u6784\\uff0c\\u60a8\\u53ef\\u4f7f\\u7528 sortedcontainers<\\/a> \\u5e93\\u3002<\\/p>\"],\"scala\":[\"Scala\",\" \\u7248\\u672c\\uff1a \\u7248\\u672c\\uff1a \\u7248\\u672c\\uff1a \\u652f\\u6301 crates.io \\u7684 rand<\\/a>\\u3001regex<\\/a> \\u548c itertools<\\/a><\\/p>\"],\"php\":[\"PHP\",\" With bcmath module.<\\/p>\"],\"typescript\":[\"TypeScript\",\" TypeScript 5.7.3<\\/p>\\r\\n\\r\\n Compile Options: --alwaysStrict --strictBindCallApply --strictFunctionTypes --target ES2024<\\/p>\\r\\n\\r\\n lodash.js<\\/a> \\u5e93\\u5df2\\u7ecf\\u9ed8\\u8ba4\\u88ab\\u5305\\u542b\\u3002<\\/p>\\r\\n\\r\\n \\u5982\\u9700\\u4f7f\\u7528\\u961f\\u5217\\/\\u4f18\\u5148\\u961f\\u5217\\uff0c\\u60a8\\u53ef\\u4f7f\\u7528 datastructures-js\\/priority-queue@6.3.2<\\/a>\\uff0c datastructures-js\\/queue@4.2.3<\\/a> \\u4ee5\\u53ca datastructures-js\\/deque@1.0.4<\\/a>\\u3002<\\/p>\"],\"racket\":[\"Racket\",\" Racket CS<\\/a> v8.15<\\/p>\\r\\n\\r\\n \\u4f7f\\u7528 #lang racket<\\/p>\\r\\n\\r\\n \\u5df2\\u9884\\u5148 (require data\\/gvector data\\/queue data\\/order data\\/heap). \\u82e5\\u9700\\u4f7f\\u7528\\u5176\\u5b83\\u6570\\u636e\\u7ed3\\u6784\\uff0c\\u53ef\\u81ea\\u884c require\\u3002<\\/p>\"],\"erlang\":[\"Erlang\",\"Erlang\\/OTP 26\"],\"elixir\":[\"Elixir\",\"Elixir 1.17 with Erlang\\/OTP 26\"],\"dart\":[\"Dart\",\" Dart 3.2\\u3002\\u60a8\\u53ef\\u4ee5\\u4f7f\\u7528 collection<\\/a> \\u5305<\\/p>\\r\\n\\r\\n \\u60a8\\u7684\\u4ee3\\u7801\\u5c06\\u4f1a\\u88ab\\u4e0d\\u7f16\\u8bd1\\u76f4\\u63a5\\u8fd0\\u884c<\\/p>\"],\"cangjie\":[\"Cangjie\",\" \\u7248\\u672c\\uff1a0.53.11 (cjnative)<\\/p>\\r\\n\\r\\n \\u7f16\\u8bd1\\u53c2\\u6570\\uff1a \\u5feb\\u901f\\u5165\\u95e8\\u8bf7\\u67e5\\u9605\\u300c\\u4ed3\\u9889\\u7f16\\u7a0b\\u8bed\\u8a00\\u5f00\\u53d1\\u6307\\u5357\\u300d<\\/a><\\/p>\"]}",
"book": null,
"isSubscribed": false,
"isDailyQuestion": false,
"dailyRecordStatus": null,
"editorType": "CKEDITOR",
"ugcQuestionId": null,
"style": "LEETCODE",
"exampleTestcases": "2\n[[0,1]]\n[2,3]\n3\n[[0,1],[0,2]]\n[1,6,3]",
"__typename": "QuestionNode"
}
}
}clang 19<\\/code> \\u91c7\\u7528\\u6700\\u65b0 C++ 23 \\u6807\\u51c6\\uff0c\\u5e76\\u4f7f\\u7528 GCC 14 \\u63d0\\u4f9b\\u7684
libstdc++<\\/code>\\u3002<\\/p>\\r\\n\\r\\n
-O2<\\/code> \\u7ea7\\u4f18\\u5316\\uff0c\\u5e76\\u63d0\\u4f9b
-gline-tables-only<\\/code> \\u53c2\\u6570\\u3002AddressSanitizer<\\/a> \\u4e5f\\u88ab\\u5f00\\u542f\\u6765\\u68c0\\u6d4b
out-of-bounds<\\/code> \\u548c
use-after-free<\\/code> \\u9519\\u8bef\\u3002<\\/p>\\r\\n\\r\\n
OpenJDK 21<\\/code>\\u3002\\u4f7f\\u7528\\u7f16\\u8bd1\\u53c2\\u6570
--enable-preview --release 21<\\/code><\\/p>\\r\\n\\r\\n
Python 2.7.18<\\/code><\\/p>\\r\\n\\r\\n
GCC 14<\\/code>\\uff0c\\u91c7\\u7528 GNU11 \\u6807\\u51c6\\u3002<\\/p>\\r\\n\\r\\n
-O2<\\/code> \\u7ea7\\u4f18\\u5316\\uff0c\\u5e76\\u63d0\\u4f9b
-g1<\\/code> \\u53c2\\u6570\\u3002 AddressSanitizer<\\/a> \\u4e5f\\u88ab\\u5f00\\u542f\\u6765\\u68c0\\u6d4b
out-of-bounds<\\/code> \\u548c
use-after-free<\\/code> \\u9519\\u8bef\\u3002<\\/p>\\r\\n\\r\\n
\\r\\nstruct hash_entry {\\r\\n int id; \\/* we'll use this field as the key *\\/\\r\\n char name[10];\\r\\n UT_hash_handle hh; \\/* makes this structure hashable *\\/\\r\\n};\\r\\n\\r\\nstruct hash_entry *users = NULL;\\r\\n\\r\\nvoid add_user(struct hash_entry *s) {\\r\\n HASH_ADD_INT(users, id, s);\\r\\n}\\r\\n<\\/pre>\\r\\n<\\/p>\\r\\n\\r\\n
\\r\\nstruct hash_entry *find_user(int user_id) {\\r\\n struct hash_entry *s;\\r\\n HASH_FIND_INT(users, &user_id, s);\\r\\n return s;\\r\\n}\\r\\n<\\/pre>\\r\\n<\\/p>\\r\\n\\r\\n
\\r\\nvoid delete_user(struct hash_entry *user) {\\r\\n HASH_DEL(users, user); \\r\\n}\\r\\n<\\/pre>\\r\\n<\\/p>\"],\"csharp\":[\"C#\",\"
Node.js 22.14.0<\\/code><\\/p>\\r\\n\\r\\n
--harmony<\\/code> \\u6807\\u8bb0\\u6765\\u5f00\\u542f \\u65b0\\u7248ES6\\u7279\\u6027<\\/a>\\u3002<\\/p>\\r\\n\\r\\n
Ruby 3.2<\\/code> \\u6267\\u884c<\\/p>\\r\\n\\r\\n
Swift 6.0<\\/code><\\/p>\\r\\n\\r\\n
Go 1.23<\\/code><\\/p>\\r\\n\\r\\n
Python 3.11<\\/code><\\/p>\\r\\n\\r\\n
Scala 3.3.1<\\/code><\\/p>\"],\"kotlin\":[\"Kotlin\",\"
Kotlin 2.1.10<\\/code><\\/p>\"],\"rust\":[\"Rust\",\"
rust 1.85.0<\\/code><\\/p>\\r\\n\\r\\n
PHP 8.2<\\/code>.<\\/p>\\r\\n\\r\\n
-O2 --disable-reflection<\\/code><\\/p>\\r\\n\\r\\n