1 条题解
-
0
题解
思路
固定一种边权 。删除所有权值为 的边后,树被分成若干连通块。一条路径上权值 恰好出现一次,当且仅当它的两个端点位于某条被删除边直接连接的两个连通块中。因此,这种颜色的贡献是每条 边两侧相邻连通块大小的乘积之和。
做法
子任务一
当 时,枚举全部顶点对,恢复唯一路径并统计路径上每种权值的出现次数。复杂度为 。
子任务二
枚举每种实际出现的权值。对当前权值,忽略这种权值的边,用深度优先搜索求出删除后的全部连通块,再累加每条被删边两端连通块大小的乘积。复杂度为 ,其中 是不同权值数量;在 时可以通过。
满分做法
把树根定为 1。对每条边,用它的较深端点代表这条边。固定权值 ,设这些代表点组成集合 。
按 DFS 序排列 ,用栈找到每个点在 中最近的祖先,得到一棵虚森林。对 ,记
$$g_v=\operatorname{size}(v)-\sum_{w\text{ 是 }v\text{ 的虚森林儿子}}\operatorname{size}(w).$$正是删除所有 边后,包含 的连通块大小。虚森林根之外的剩余根连通块大小为
$$g_0=n-\sum_{v\text{ 是虚森林根}}\operatorname{size}(v).$$若 的虚森林父亲为 ,代表边的贡献为 ;若 是虚森林根,则贡献为 。
复杂度
所有颜色集合的总大小为 ,排序总复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1319
- 时间
- 5000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者