原题链接
1 题目
1.1 题目所需求出内容
对于本题,最终要求:求一个最小值
1.2 题目背景、允许、禁止与限制
背景:有一个有 nnn 个结点的无根树
允许:放置尽可能少的士兵,在结点 iii 放置士兵可以使所有与结点 iii 相连的边被监视
禁止:
限制:最后要使整棵树的每条边都会被监视
1.3 题目数据范围与猜测
1≤d,n≤1500⟶O(n2)1 \le d,n \le 1500 \longrightarrow O(n^2)1≤d,n≤1500⟶O(n2)
1.4 一句话概括题意
有一个无根树,可以放置一个士兵,在结点 iii 放置士兵可以使所有与结点 iii 相连的边被监视。最终求使整棵树的每条边都会被监视到的情况下需放置士兵的最小数量
2 题目破题推导
> 注:以下六种方法都可以考虑一下
2.1 大拆小、小组大
2.2 正向思维转逆向思维,逆向思维转正向思维
2.3 以终为始、以始为终
2.4 数学
2.5 分情况考虑
首先我们知道,一条边 E(u,v)E(u,v)E(u,v) 只可能被点 uuu 或者点 vvv 监视
* 如果点 uuu 监视了,那么点 vvv 就随意(点 vvv 当然也可以监视,比如用于监视点 vvv 的子节点)
* 如果点 uuu 没有监视,那么点 vvv 只能监视
2.6 手动推导
2.7 边界测试
3 模型匹配
提取关键词:
树+动态影响,是树形dp
4 具体方案
主要就是dp数组的定义
将 dpij(0≤j≤1){dp_i}_j(0 \le j \le 1)dpi j (0≤j≤1) 设定为:以 iii 为根的子树,在结点 iii 放置(j=1j=1j=1)以及不放置(j=0j=0j=0)时所需的最小士兵数量
剩下的都比较简单
5 最终代码(禁止抄袭,仅用于参考)