AvoidStraightLine
ABC312G:Avoid Straight Line
为Distance Sums 2的简单扩展,做法完全一致。
题解:https://blog.csdn.net/weixin_52536621/article/details/127039502)(树形那一栏)
考虑对于一个三元组,要求解不在一条简单路径上的三点,发现不好做,那我们可以求在一条简单路径上的三点,然后根据组合数 \(C_n^3-ans\) 即可。
然后发现只要确定了两个端点,然后中间任选一个点即可。这样的方案肯定是唯一的。
我们可以用那道题的做法处理出距离和,减去 \(n-1\)(除掉端点)即可。然后最后因为有两个端点都会算到,所以 \(\div2\)。
AC
对于距离和的部分,不需要这么麻烦。
我们直接考虑每条边的贡献即可,每条边的贡献为子树内的所有点 \(\times\) 子树外的所有点。
直接一遍 dfs
处理出每条边的贡献加和,然后最后去除两两点对的端点费用(即 \(-C_n^2\))即可,然后再用总方案数减去。