简要题意:
给定一棵树,每个点有黑白两种颜色;对每个节点,求出包含当前节点的连通图,使得白点数与黑点数差最小。输出这些值。
F题也这么简单,咳咳,要是我也熬夜打上那么一场。。。可惜没时间打啊
美国佬怎么想的,不能让比赛设置成美国的上午,那我们就是下午了;非要设置成下午,那我们就是半夜。。。
首先,这题一看就是 dp \texttt{dp} dp,树形 dp \texttt{dp} dp,换根 dp \texttt{dp} dp.
下文中,用 Subtree(i) \texttt{Subtree(i)} Subtree(i) 表示 i i i 的子树包含的所有节点集合。
用 father(i) \texttt{father(i)} father(i) 表示 i i i 节点的父亲。
用 KaTeX parse error: Expected '}', got '_' at position 15: \texttt{colour_̲i} 表示 i i i 节点的颜色值,黑为 − 1 -1 −1,白为 1 1 1.
首先,假定 1 1 1 为根。
用 f i f_i fi 表示,当前联通图包含在以 i i i 为根的子树内的答案。
则必然存在:
f i = c o l o u r i + ∑ x ∈ S u b t r e e ( i ) max ( f x , 0 ) f_i = colour_i + \sum_{x \in Subtree(i)} \max(f_x,0) fi=colouri+x∈Subtree(i)∑max(fx,0)
因为, c o l o u r i colour_i colouri 是必须包含的,其次是所有子树中的答案统计;负数不统计。
下面考虑一个换根(树形) dp \texttt{dp} dp.用 g i g_i gi 表示 整棵树去掉以 i i i 为根的子树后(保留 i i