题意
给一棵大小为$n$的树,每个节点有权值$a_i$,对其染色,染色时需保证所有相同颜色的边可以组成一颗树,定义树的权值为其不同颜色的子树上的所有节点的权值和,问染$1$~$n-1$种颜色,每次可以得到最大的树的权值。
分析
每增加一种颜色的时候,因为只有其根节点与其他颜色相邻,所以每次只会增加其根节点的权值,那么每次挑一个拥有最大权值的节点,将其一颗子树染成不同颜色即可,那么最多染其出度减一次(因为只有这么多棵子树),维护一个优先队列和一个出度数组即可。
1 |
|
题意
给一棵大小为$n$的树,每个节点有权值$a_i$,对其染色,染色时需保证所有相同颜色的边可以组成一颗树,定义树的权值为其不同颜色的子树上的所有节点的权值和,问染$1$~$n-1$种颜色,每次可以得到最大的树的权值。
分析
每增加一种颜色的时候,因为只有其根节点与其他颜色相邻,所以每次只会增加其根节点的权值,那么每次挑一个拥有最大权值的节点,将其一颗子树染成不同颜色即可,那么最多染其出度减一次(因为只有这么多棵子树),维护一个优先队列和一个出度数组即可。
1 | #pragma GCC optimize(3, "Ofast", "inline") |