加载中...

7.31——1022E

E

简述题意:给定一棵树,大小 \(n\) 为奇数;现在要求删一条边(同时还要删除两个端点的其中一个,并将原来连接删除点的所有边连向另一个未删除点),形成大小为 \(n-1\) (偶数)的树,并用 \(\frac{n-1}{2}\) 种颜色对结点涂色,每种颜色涂两个结点,使得同色的一对结点之间形成的路径(共 \(\frac{n-1}{2}\) 条)长度之和最大。问删哪条边,以及涂色方案。

先考虑怎样对一个大小为偶数 \(n-1\) 的树涂色,使得所有路径长度之和最大:考虑每条边的贡献:假设树有根,则一条边的贡献应为该边对应的子树内的不同颜色种类数(也是可达的最大贡献,证明略)。那么贪心地考虑:若能让所有边对应的子树内的结点两两颜色均不同,则每条边的贡献都可以达到最大值,进而所有路径长度之和也最大。

那么是否可以保证这一点呢?答案是肯定的。考虑树的重心:以树的重心为根,那么由树重心的性质,其子树大小的最大值 \(\leq \frac{n-1}{2}\),而颜色种数恰好为 \(\frac{n-1}{2}\),故可以保证以除重心外的所有点为根的子树中的结点均可涂上两两不同的颜色,进而对于 \(\forall\) 颜色,对应的两个结点均可在根节点(也是重心)的不同子树内。此时答案不仅最大,而且为定值——由于所有路径均经过根结点,因此答案可看作所有点到根节点的距离之和(当然,也可以看作树中所有 \(n - 2\) 个子树的大小,因为每条边的贡献均为子树大小)。进而可以发现涂色方式的限制也非常弱——只需要保证以树的重心为根,并保证重心的每个子树内结点颜色两两不同即可,同时注意重心颜色的特殊处理——将其归到其最小的子树中,以保证其子树大小的最大值 \(\leq \frac{n-1}{2}\)

现在考虑需要删除哪条边。注意删边的要求:本题的删边等价于删除边的两个端点中编号较大的那个,再将其所有原来的连接点连到编号较小的点上。在本题中,删除某个点后,不会改变原来的重心(这个本蒟蒻暂时还没弄懂,求大佬指导!),由于原树中所有点到重心的距离为定值,因此可以将最大化总路径长等价于最小化删点带来的亏损。该亏损与被删点及其父亲的编号关系、子树大小、结点深度等因素有关,计算时需要细心一些,避免一些想当然的错误,此处具体细节见代码。

按照代码中的方法确定了被删点后,模拟涂色的过程:可以直接在 \(dfs\)用大小为 \(\frac{n-1}{2}\) 的循环节模拟求 \(dfn\) 序的过程。这样可以保证每个子树内的结点颜色均两两不同。

code

posted @ 2025-07-31 18:37  jxs123  阅读(10)  评论(0)    收藏  举报