Sasha and a Walk in the City

先写一下官方题解

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

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

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

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

怎么选择?就是利用\(f\)数组!

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

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

在说一下我的解法

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值