#P9305. 「DTOI-5」校门外的枯树

    ID: 8325 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 4 上传者: 标签>模拟二分O2优化深度优先搜索,DFS

「DTOI-5」校门外的枯树

题目背景

某天放学,你走出了校门,发现校门外又双叒叕出现了一排树。只不过因为正值寒冬时节,树的叶子都掉光了,树们在寒风中瑟瑟发抖,让人担心它们会不会在某一时刻失去平衡,然后倒下来。

题目描述

给你校门外的一排 TT 棵无向有根树(每棵树的根节点编号均为 11),每棵树的每条边有其重量 mim_i,现在请你算出每棵树的不平衡度 该树的每个节点的子树的不平衡度,好让校方帮忙加固。不要问我为什么重量的字母是 m\color{white}\sout{\text{不要问我为什么重量的字母是 }m\text。}

注意这里的树的边是有顺序的你总不可能把树枝掰断然后嫁接到另一个地方吧,这可是枯树啊喂


对于一颗有根树,定义其不平衡度为该树被在根节点与某一叶子节点的一条最短路径分割为左右两部分(两个边集)后(两个边集均不含该最短路径中的边)两部分的边的总重之差的最小值。特别地,单个点作为树的不平衡度为 00;空边集内边的总重为 00

输入格式

最开始一行读入两个正整数 T,kT,kTT 表示数据组数(即树的总数)。在每组测试数据中,如果 k=1k=1,那么你只需要算出整个树的不平衡度即可;如果 k=2k=2你需要分别对每个节点计算出其子树的不平衡度

对于每棵树,第一行读入一个正整数 nnnn 表示该树内的节点数。

nn 行,第 uu 行描述一个节点,该节点编号为 uu

  • 第一个正整数,表示该点的儿子个数,记为 xx
  • 后有 2x2x 个正整数,第 2i12i-1 个数表示 uu从左往右ii 个儿子 vv,第 2i2i 个数表示连接 uuvv 的边的重量 muvm_{u\leftrightarrow v}

输出格式

输出 TT 行:

  • 如果 k=1k=1,第 ii 行仅输出一个非负整数表示第 ii 棵树的不平衡度。
  • 如果 k=2k=2,第 ii 行输出 nn 个非负整数,第 jj 个数表示第 ii 棵树中的第 jj 号节点的子树的不平衡度。
2 1
7
3 3 2 2 114 4 7
3 5 19 6 19 7 514
0
0
0
0
0

11
5 2 4 3 9 8 1 9 7 11 10
0
3 4 8 5 3 7 2
0
1 6 6
0
0
0
1 10 5
0
0
33
2
2 2
7
3 3 2 2 114 4 7
3 5 19 6 19 7 514
0
0
0
0
0

11
5 2 4 3 9 8 1 9 7 11 10
0
3 4 8 5 3 7 2
0
1 6 6
0
0
0
1 10 5
0
0
33 38 0 0 0 0 0
2 0 6 0 0 0 0 0 0 0 0

提示

【数据范围】

不捆绑测试,同一 Subtask\text{Subtask} 内每个测试点等分。

$$%\def\or{\operatorname{or}} %这 arraystretch 咋老是拼错/oh \def\arraystretch{1.5} \begin{array}{|c|c|c|c|c|}\hline \textbf{Subtask}&\sum n\leqslant&k=&\textbf{Special Constraints}&\textbf{Score}\cr\hline \sf1&2\times10^5&1&\bf A&1\cr\hline \sf2&20&1&T=1&5\cr\hline \sf3&5000&1&&5\cr\hline \sf4&10^5&2&\bf B&15\cr\hline \sf5&3\times10^5&1&&30\cr\hline \sf6&2\times10^5&2&\bf A'&4\cr\hline \sf7&3\times10^5&2&&40\cr\hline \end{array} $$
  • 特殊性质 A\bf A 限宽 2.6m:保证每棵树只有一个叶子节点(n2n\geqslant2)。
  • 特殊性质 B\bf B 限高 4.5m:保证每棵树都为菊花图(根节点有 n1n-1 个儿子)。
  • 特殊性质 A\bf A':保证每棵树都是链(每个节点的度数不超过 22)。

关于 A\bf AA\bf A' 的区别:A\bf A' 中有可能树的根的度数为 22,而 A\bf A 中根的度数显然为 11

对于 100%100\% 的数据,T4000T \leqslant 40001n105{\color{red}\textbf1}\leqslant n\leqslant 10^5n3×105\sum n\leqslant 3\times10^51mi1041 \leqslant m_i \leqslant10^41u,vn1\leqslant u, v\leqslant nk{1,2}k\in\{1,2\}


叶子节点为没有儿子的节点,即除根节点以外在树中的度为 11 的点。

样例输入中为方便阅读加上了空行,实际数据中没有空行。

【样例 11\bm1-\bm1 解释】

该树如下图所示,边权即边的重量。

最优解为选择 1271\to2\to7 作为分割路径,不平衡度为 (2+19+19)7=33{\large\vert}(2+19+19)-7{\large\vert}=33

如果选择 1261\to2\to6 作为分割路径,那么两部分的边的总重之差为 (2+19)(7+514)=500{\large\vert}(2+19)-(7+514){\large\vert}=500,不为最小值。

$\color{transparent}\sout{不知道你们发现没有\begin{cases}114+2+19+19=154\\114+514+19+19=666\end{cases}}$

【样例 12\bm1-\bm2 解释】

该树如下图所示。

最优解为选择 171\to7 作为分割路径,不平衡度为 (4+8+3+6)(1+7+5+10)=2{\large\vert}(4+8+3+6)-(1+7+5+10){\large\vert}=2