{ "data": { "question": { "questionId": "4151", "questionFrontendId": "3772", "categoryTitle": "Algorithms", "boundTopicId": 3850505, "title": "Maximum Subgraph Score in a Tree", "titleSlug": "maximum-subgraph-score-in-a-tree", "content": "
You are given an undirected tree with n nodes, numbered from 0 to n - 1. It is represented by a 2D integer array edges of length n - 1, where edges[i] = [ai, bi] indicates that there is an edge between nodes ai and bi in the tree.
You are also given an integer array good of length n, where good[i] is 1 if the ith node is good, and 0 if it is bad.
Define the score of a subgraph as the number of good nodes minus the number of bad nodes in that subgraph.
\n\nFor each node i, find the maximum possible score among all connected subgraphs that contain node i.
Return an array of n integers where the ith element is the maximum score for node i.
A subgraph is a graph whose vertices and edges are subsets of the original graph.
\n\nA connected subgraph is a subgraph in which every pair of its vertices is reachable from one another using only its edges.
\n\n\n
Example 1:
\n\n
Input: n = 3, edges = [[0,1],[1,2]], good = [1,0,1]
\n\nOutput: [1,1,1]
\n\nExplanation:
\n\nExample 2:
\n\n
Input: n = 5, edges = [[1,0],[1,2],[1,3],[3,4]], good = [0,1,0,1,1]
\n\nOutput: [2,3,2,3,3]
\n\nExplanation:
\n\n0, 1, 3, 4, which has 3 good nodes and 1 bad node, resulting in a score of 3 - 1 = 2.1, 3, 4, which has 3 good nodes, resulting in a score of 3.1, 2, 3, 4, which has 3 good nodes and 1 bad node, resulting in a score of 3 - 1 = 2.Example 3:
\n\n
Input: n = 2, edges = [[0,1]], good = [0,0]
\n\nOutput: [-1,-1]
\n\nExplanation:
\n\nFor each node, including the other node only adds another bad node, so the best score for both nodes is -1.
\n\n
Constraints:
\n\n2 <= n <= 105edges.length == n - 1edges[i] = [ai, bi]0 <= ai, bi < ngood.length == n0 <= good[i] <= 1edges represents a valid tree.给你一个 无向树 ,它包含 n 个节点,编号从 0 到 n - 1。树由一个长度为 n - 1 的二维整数数组 edges 描述,其中 edges[i] = [ai, bi] 表示在节点 ai 和节点 bi 之间有一条边。
另给你一个长度为 n 的整数数组 good,其中 good[i] 为 1 表示第 i 个节点是好节点,为 0 表示它是坏节点。
定义 子图 的 得分 为子图中好节点的数量减去坏节点的数量。
\n\n对于每个节点 i,找到包含节点 i 的所有 连通子图 中可能的最大得分。
返回一个长度为 n 的整数数组,其中第 i 个元素是节点 i 的 最大得分 。
子图 是原图的一个子集,其顶点和边均来自原图。
\n\n连通子图 是一个子图,其中每一对顶点都可以通过该子图的边相互到达。
\n\n\n\n
示例 1:
\n\n
输入: n = 3, edges = [[0,1],[1,2]], good = [1,0,1]
\n\n输出: [1,1,1]
\n\n解释:
\n\n示例 2:
\n\n
输入: n = 5, edges = [[1,0],[1,2],[1,3],[3,4]], good = [0,1,0,1,1]
\n\n输出: [2,3,2,3,3]
\n\n解释:
\n\n0, 1, 3, 4 组成,其中有 3 个好节点和 1 个坏节点,得分为 3 - 1 = 2。1, 3, 4 组成,其中有 3 个好节点,得分为 3。1, 2, 3, 4 组成,其中有 3 个好节点和 1 个坏节点,得分为 3 - 1 = 2。示例 3:
\n\n
输入: n = 2, edges = [[0,1]], good = [0,0]
\n\n输出: [-1,-1]
\n\n解释:
\n\n对于每个节点,包含另一节点只会增加一个坏节点,因此每个节点的最佳得分为 -1。
\n\n\n
提示:
\n\n2 <= n <= 105edges.length == n - 1edges[i] = [ai, bi]0 <= ai, bi < ngood.length == n0 <= good[i] <= 1edges 表示一棵有效树。\\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@4.17.21<\\/a> \\u5e93\\u5df2\\u7ecf\\u9ed8\\u8ba4\\u88ab\\u5305\\u542b\\u3002<\\/p>\\r\\n\\r\\n \\u60a8\\u53ef\\u4f7f\\u7528 datastructures-js <\\/a>\\u5e93\\u6240\\u63d0\\u4f9b\\u7684\\u6570\\u636e\\u7ed3\\u6784\\uff0c\\u7248\\u672c\\u4fe1\\u606f\\uff1a<\\/p>\\r\\n\\r\\n \\r\\n \\u5bf9\\u4e8e Binary Search Tree, Trie \\u548c Graph\\uff0c\\u56e0\\u5176\\u53d8\\u91cf\\u547d\\u540d\\u4e0e\\u4e00\\u4e9b\\u9898\\u76ee\\u51b2\\u7a81\\uff0c\\u60a8\\u9700\\u8981\\u5728\\u4f7f\\u7528\\u65f6\\u624b\\u52a8\\u5bfc\\u5165\\u5b83\\u4eec\\uff0c\\u5982\\u4e0b\\u6240\\u793a\\uff1a<\\/p>\\r\\n\\r\\n \\r\\n \\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@4.17.21<\\/a> \\u5e93\\u5df2\\u7ecf\\u9ed8\\u8ba4\\u88ab\\u5305\\u542b\\u3002<\\/p>\\r\\n\\r\\n \\u60a8\\u53ef\\u4f7f\\u7528 datastructures-js <\\/a>\\u5e93\\u6240\\u63d0\\u4f9b\\u7684\\u6570\\u636e\\u7ed3\\u6784\\uff0c\\u7248\\u672c\\u4fe1\\u606f\\uff1a<\\/p>\\r\\n\\r\\n \\r\\n \\u5bf9\\u4e8e Binary Search Tree, Trie \\u548c Graph\\uff0c\\u56e0\\u5176\\u53d8\\u91cf\\u547d\\u540d\\u4e0e\\u4e00\\u4e9b\\u9898\\u76ee\\u51b2\\u7a81\\uff0c\\u60a8\\u9700\\u8981\\u5728\\u4f7f\\u7528\\u65f6\\u624b\\u52a8\\u5bfc\\u5165\\u5b83\\u4eec\\uff0c\\u5982\\u4e0b\\u6240\\u793a\\uff1a<\\/p>\\r\\n\\r\\n \\r\\n 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\\uff1a1.0.0 LTS (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": "3\n[[0,1],[1,2]]\n[1,0,1]\n5\n[[1,0],[1,2],[1,3],[3,4]]\n[0,1,0,1,1]\n2\n[[0,1]]\n[0,0]",
"__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\\nOpenJDK 25<\\/code>\\u3002\\u4f7f\\u7528\\u7f16\\u8bd1\\u53c2\\u6570 --enable-preview --release 25<\\/code><\\/p>\\r\\n\\r\\nPython 2.7.18<\\/code><\\/p>\\r\\n\\r\\nGCC 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\\r\\n\\\"@datastructures-js\\/binary-search-tree\\\": \\\"5.3.3\\\"\\r\\n\\\"@datastructures-js\\/deque\\\": \\\"1.0.6\\\"\\r\\n\\\"@datastructures-js\\/graph\\\": \\\"5.3.1\\\"\\r\\n\\\"@datastructures-js\\/heap\\\": \\\"4.3.5\\\"\\r\\n\\\"@datastructures-js\\/linked-list\\\": \\\"6.1.4\\\"\\r\\n\\\"@datastructures-js\\/priority-queue\\\": \\\"6.3.4\\\"\\r\\n\\\"@datastructures-js\\/queue\\\": \\\"4.2.4\\\"\\r\\n\\\"@datastructures-js\\/set\\\": \\\"4.2.2\\\"\\r\\n\\\"@datastructures-js\\/stack\\\": \\\"3.1.5\\\"\\r\\n\\\"@datastructures-js\\/trie\\\": \\\"4.2.3\\\"\\r\\n<\\/pre>\\r\\n<\\/p>\\r\\n\\r\\n
\\r\\nconst {\\r\\n BinarySearchTree, BinarySearchTreeNode, AvlTree, AvlTreeNode,\\r\\n Trie, TrieNode,\\r\\n Graph, DirectedGraph,\\r\\n} = require('datastructures-js');\\r\\n<\\/pre>\\r\\n<\\/p>\"],\"ruby\":[\"Ruby\",\"Ruby 3.2<\\/code> \\u6267\\u884c<\\/p>\\r\\n\\r\\nSwift 6.0<\\/code><\\/p>\\r\\n\\r\\nGo 1.23<\\/code><\\/p>\\r\\n\\r\\nPython 3.11<\\/code><\\/p>\\r\\n\\r\\nScala 3.3.1<\\/code><\\/p>\"],\"kotlin\":[\"Kotlin\",\"Kotlin 2.1.10<\\/code><\\/p>\"],\"rust\":[\"Rust\",\"rust 1.88.0<\\/code>\\uff0c\\u4f7f\\u7528 edition 2024\\u3002<\\/p>\\r\\n\\r\\nPHP 8.2<\\/code>.<\\/p>\\r\\n\\r\\n\\r\\n\\\"@datastructures-js\\/binary-search-tree\\\": \\\"5.3.3\\\"\\r\\n\\\"@datastructures-js\\/deque\\\": \\\"1.0.6\\\"\\r\\n\\\"@datastructures-js\\/graph\\\": \\\"5.3.1\\\"\\r\\n\\\"@datastructures-js\\/heap\\\": \\\"4.3.5\\\"\\r\\n\\\"@datastructures-js\\/linked-list\\\": \\\"6.1.4\\\"\\r\\n\\\"@datastructures-js\\/priority-queue\\\": \\\"6.3.4\\\"\\r\\n\\\"@datastructures-js\\/queue\\\": \\\"4.2.4\\\"\\r\\n\\\"@datastructures-js\\/set\\\": \\\"4.2.2\\\"\\r\\n\\\"@datastructures-js\\/stack\\\": \\\"3.1.5\\\"\\r\\n\\\"@datastructures-js\\/trie\\\": \\\"4.2.3\\\"\\r\\n<\\/pre>\\r\\n<\\/p>\\r\\n\\r\\n
\\r\\nimport {\\r\\n BinarySearchTree, BinarySearchTreeNode, AvlTree, AvlTreeNode,\\r\\n Trie, TrieNode,\\r\\n Graph, DirectedGraph,\\r\\n} from 'datastructures-js';\\r\\n<\\/pre>\\r\\n<\\/p>\"],\"racket\":[\"Racket\",\"-O2 --disable-reflection<\\/code><\\/p>\\r\\n\\r\\n