摘要:
题面传送门 数据这么小显然状压dp 考虑状压$dp_i$表示打掉的集合为$i$时最少抛物线条数。 预处理$f_{i,j}$表示过$i$点和$j$点的抛物线经过的点的集合。 但是这样的转移是$O(T2nn2)$的。 考虑怎么优化。 很明显我们的$dp$转移是无序的。将其变成有序即先打最小的点则可优化掉 阅读全文
摘要:
题面传送门 考虑两颗子树如果交换,那么其实对其它子树与这两颗子树的贡献是没有影响的。 那么在线段树合并时判断一下是否要交换即可。 代码实现: #include<cstdio> #define beg(x) int cur=s.h[x] #define end cur #define go cur=t 阅读全文
摘要:
题面传送门 考虑如果是边权怎么做。那么对于每个边从大到小合并然后按次计算贡献即可。 但是这道题是点权。 就有一个方法是把一条边的边权看作两点权最大值。仔细想想就发现是正确的。 代码实现: #include<cstdio> #include<algorithm> #define max(a,b) (( 阅读全文