2026/5/21 12:16:40
网站建设
项目流程
苏州网站建设公司书生商友,网站域名 空间,建立无上气运皇朝,果盘游戏推广平台P14919 [GESP202512 六级] 路径覆盖
题目描述
给定一棵有 nnn 结点的有根树 TTT#xff0c;结点依次以 1,2,…,n1,2,\ldots,n1,2,…,n 编号#xff0c;根结点编号为 111。方便起见#xff0c;编号为 iii 的结点称为结点 iii。
初始时 TTT 中的结点均为白色。你需要将 TTT 中…P14919 [GESP202512 六级] 路径覆盖题目描述给定一棵有nnn结点的有根树TTT结点依次以1,2,…,n1,2,\ldots,n1,2,…,n编号根结点编号为111。方便起见编号为iii的结点称为结点iii。初始时TTT中的结点均为白色。你需要将TTT中的若干个结点染为黑色使得所有叶子到根的路径上至少有一个黑色结点。将结点iii染为黑色需要代价cic_ici你需要在满足以上条件的情况下最小化染色代价之和。叶子是指TTT中没有子结点的结点。输入格式第一行一个正整数nnn表示结点数量。第二行n−1n-1n−1个正整数f2,f3,…,fnf_2,f_3,\ldots,f_nf2,f3,…,fn其中fif_ifi表示结点iii的父结点的编号保证fiif_iifii。第三行nnn个正整数c1,c2,…,cnc_1,c_2,\ldots,c_nc1,c2,…,cn其中cic_ici表示将结点iii染为黑色所需的代价。输出格式一行一个整数表示在满足所有叶子到根的路径上至少有一个黑色结点的前提下染色代价之和的最小值。输入输出样例 #1输入 #14 1 2 3 5 6 2 3输出 #12输入输出样例 #2输入 #27 1 1 2 2 3 3 64 16 15 4 3 2 1输出 #210说明/提示对于40%40\%40%的测试点保证2≤n≤162\le n\le 162≤n≤16。对于另外20%20\%20%的测试点保证fii−1f_ii-1fii−1。对于所有测试点保证2≤n≤1052\le n\le 10^52≤n≤1051≤ci≤1091\le c_i\le 10^91≤ci≤109。题解路径覆盖GESP202512 六级题目分析你需要解决的问题是给定一棵以1为根的树将若干节点染黑使得所有叶子到根的路径上至少有一个黑点且染色总代价最小。这是典型的树形动态规划树形DP问题核心是通过后序遍历树从叶子节点向上推导每个子树的最小覆盖代价。解题思路DP状态定义dp[i]表示以节点i为根的子树满足“所有叶子到i的路径至少有一个黑点”的最小染色代价。遍历方式由于题目中父节点编号一定小于子节点f_i i因此从n到1逆序遍历等价于从叶子节点到根节点的后序遍历能保证处理父节点时所有子节点已处理完毕。状态转移若i是叶子节点无任何子节点必须将i染黑因此dp[i] c[i]。若i是非叶子节点有两种选择——✅ 选择自己染黑代价为c[i]✅ 选择子节点的覆盖代价之和代价为所有子节点dp值的总和取两种选择的最小值作为dp[i]。最终答案根节点1的dp[1]即为整棵树的最小覆盖代价。#includebits/stdc.husingnamespacestd;intn;// 树的节点总数intf[100005];// f[i] 存储节点i的父节点编号i≥2intc[100005];// c[i] 存储将节点i染黑的代价longlongdp[100005];// dp[i]以i为根的子树的最小覆盖代价用long long避免溢出c[i]可达1e9n可达1e5intmain(){// 输入节点总数cinn;// 输入2~n号节点的父节点题目保证f[i]ifor(inti2;in;i){cinf[i];}// 输入每个节点的染色代价for(inti1;in;i){cinc[i];}// 逆序遍历从n到1等价于从叶子到根的后序遍历for(intin;i1;i--){// 状态转移核心// 1. 叶子节点dp[i]初始为0会被赋值为c[i]必须自己染黑// 2. 非叶子节点比较「子节点代价和」与「自己染黑代价」取更小值if(dp[i]0||dp[i]c[i]){dp[i]c[i];}// 将当前节点的最小代价累加到父节点的dp中父节点的初始代价是所有子节点代价的和// 注意根节点1没有父节点f[1]无意义但i1时执行此语句不影响数组越界不f数组仅2~n有值f[1]未初始化但i1时dp[f[1]]不会被后续使用dp[f[i]]dp[i];}// 根节点1的dp值即为整棵树的最小覆盖代价coutdp[1];return0;}复杂度分析时间复杂度O(n)仅需遍历节点1~n各一次所有操作均为常数级。空间复杂度O(n)主要消耗在存储父节点、代价、DP数组的数组空间能满足n≤1e5的数据规模。总结本题核心是树形DP利用“父节点编号小于子节点”的特性通过逆序遍历实现从叶子到根的后序遍历。dp[i]的状态转移逻辑是取“自己染黑的代价”和“所有子节点覆盖代价之和”的最小值。最终根节点的dp[1]即为满足条件的最小总代价算法时间/空间效率均能适配题目数据范围。