#P12669. 「TFXOI Round 2」最小价值最大树
「TFXOI Round 2」最小价值最大树
题目背景
本题征求时间复杂度低于 的做法,若有人成功,请联系题目提供者。
数据生成器在附件,运行前需要先将 std.cpp 编译为名为 std 的可执行文件。
公元前 278 年的今天,伟大的诗人屈原投汨罗江自尽,距今已有 2303 年。
有一颗江边的树想要纪念他,所以请你来对这棵树做一些装饰。
题目描述
有一个 个点的树,点的编号从 到 。
第 个点的点权是 。
定义 。
定义 为点 的所有能通过一条边到达的点的集合。
定义如下操作:
先选定一个点 ,以及一个其直接连接的点集 。
然后,收益加上 $\sum\limits_{v\in s}f(a_i,a_v) - \sum\limits_{v\in all(i)}(a_v\land a_i)$。
然后,。
定义树的价值为对其执行任意次以上操作能获得的最大收益(假设一开始收益为 ,上述操作仅用于定义树的价值,不会真的执行)。
定义森林的价值为其中所有树的价值的总和减去附加代价,森林中的两个点属于同一棵树,当且仅当两个点之间存在一条路径连接。
一开始,附加代价等于 。
你可以执行以下两种操作,其中第一种操作次数没有限制,第二种操作最多执行 次:
- 选定两个点 ,使得 之间有直接连边,令 ,附加代价减去 ,然后将 之间的边断开。
- 选定一个点 ,将 点删除,并断开 连接的所有边。
答案为经过上述操作之后,题目给定的树形成的森林的最小价值。
你需要对于 都计算出这个答案。
注释一: 的意思是 和 的按位与值。
注释二: 的意思是 和 的按位异或值。
注释三: 的意思是将 赋值为 。
输入格式
第一行两个以空格分开的整数,分别是 和 。
第二行共 个以空格分开的整数,代表 。
接下来 行,每行两个以空格分开的整数 ,代表 之间存在一条边。
输出格式
输出一行 个由空格隔开的整数,分别代表 的答案。
5 3
1 4 5 1 4
1 2
2 3
3 4
4 5
15 6 0 0
提示
对于 C++ 语言,答案可能会超过 long long 范围,请使用 128 位整型,或者其他高精度。
对于全部的数据:,,详细数据范围见下表。
| Subtask 编号 | 特殊限制 | 分值 |
| :----------: | :--------------: | :----:|
| #1 | | |
| #2 | | |
| #3 | | |
| #4 | | |
| #5 | | |
| #6 | 无 | |