杂题

题意

给定一棵\(2n-1\)个点的树,\(n\)个白点,\((n-1)\)个黑点。
对于每个黑点,两个儿子节点,分别为黑点和白点,边分为红、蓝两种颜色,黑点到儿子节点一条为红,一条为蓝。
白点均为叶子节点。
需要标记\(n-1\)条边,对于每个白点,令至根的路径上还有\(x\)条红边没标记,\(y\)条蓝边没标记,每个白点有三个关键字\((a_i,b_i,c_i)\),其贡献为\(c_i\times(b_i+x)\times(a_i+y)\)
求最小贡献。
\(n\le 20000\),树深度不超过\(40\)

做法

强制标记\(n-1\)条边,另显然函数导数是单调不降的
就带权二分
发现对于同色选择的边,是连续的一段

\(f_{i,a,b}\)为到\(i\)点时,\(i\)至根红边状态为\(a\),蓝边状态为\(b\)
\(a=0\),则表示\(i\)至根红边全部选;否则表示至根红边个数为\(a-1\),子树内均不选红边。蓝边同理。
\(a,b\)均不为\(0\),子树状态是确定的,可以预处理出来。故\(f_{i,a,b}\)的状态数为\(O(ndep)\),转移是\(O(1)\)的。
然后预处理子树总贡献复杂度为\(O(ndep^2)\)

总复杂度\(O(ndeplogV+ndep^2)\)

posted @ 2020-05-25 20:09  Grice  阅读(96)  评论(0编辑  收藏  举报