7.13——862E
862E
显然只出现 \(1\) 次的权值永远不会有贡献;对于出现超过 \(2\) 次的权值,由鸽巢原理可知无论怎样分成两个部分,必然会有其中一部分的出现次数 \(>=2\) 次。因此这些权值的贡献永远存在。我们只需要关心恰好出现 \(2\) 次的权值。
而题目要求的是关于所有边的答案,由于断开所有边相当于将整棵树分成子树内和子树外两部分,因此可以看作是求所有子树的答案,显然可以想到启发式合并:对于每个子树,用 \(map\) 维护 所有恰好出现 \(2\) 次的数字 在子树内的出现次数:
- \(0\) 次:在子树外出现 \(2\) 次,该权值有贡献
- \(1\) 次:在子树内与子树外各出现 \(1\) 次,该权值无贡献
- \(2\) 次:在子树内出现 \(2\) 次,该权值有贡献
因此用一个 \(set\) 动态维护当前子树内所有出现 \(0\) 次或 \(2\) 次的权值即可,具体细节见代码。

浙公网安备 33010602011771号