Sasha and a Walk in the City

先写一下官方题解

首先原问题有一个很显然的解集:点集中任意两点不存在祖孙关系

所以我们令dp[v]表示以v为根的子树的点集的数目,这些点集中任意两点不存在祖孙关系

如果一个解集中有一个点是另一个点的祖先,我们画出图

那么这个点上面的点(包括这些点的分支)是肯定不能选择的,所以这个点集的剩下的点只能在这个点的子树里面选择

怎么选择?就是利用dp数组!

枚举v的每个子树,加上其dp就好了。因为肯定不能同时选择两个及以上的子树,因为现在已经选择了v了,这样会三点共线

然后把每个点的贡献全部加起来就好了

再说一下我的解法

因为做这道题目的时候很明显的可以发现不要三点共线,然后考虑一颗子树的时候就想到从这颗子树选出一个点集,这个点集是否存在两点的连线的延长线到达根节点(也就是是否存在一个点是另一个点的祖先)是一个很关键的信息

所以我们设f[v][0]表示没有,f[v][1]表示有,然后推导看CF的代码吧

posted @   最爱丁珰  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示