#P17275. [eJOI 2026] Teamfulness
[eJOI 2026] Teamfulness
题目描述
EJOI 期间,Anton 在 Kaunas 散步时发现了 个参赛者聚集点,编号为 到 。每个地点恰好由一支队伍的成员占据,队伍编号为 到 。同一支队伍的成员可以占据任意多个地点,也可能有队伍不占据任何地点。
这些地点由 条双向道路连接,并且任意两个地点之间都恰好存在一条简单路径,因此它们构成一棵树。简单路径是一个由互不相同的地点组成的序列,其中每两个相邻地点之间都有道路。路径长度是它使用的道路数,也就是经过的地点数减 。
Anton 想沿一条简单路径散步,并经过尽可能多的地点。如果一条简单路径的长度在树中所有简单路径里最大,则称它是有趣路径。一条路径的团队丰富度是 Anton 沿途遇到的不同队伍数量。
请计算所有不同有趣路径的团队丰富度之和。当且仅当两条有趣路径经过的地点集合完全相同时,它们才被视为同一条路径。特别地,反向经过一条路径不会产生新的路径。
实现细节
你需要实现以下函数:
long long teamfulness(int N, int K, std::vector<int> a,
std::vector<int> u, std::vector<int> v)
- :地点数;
- :队伍数;
- :长度为 的数组,其中 表示占据地点 的队伍;
- :长度为 的数组,其中 和 是第 条道路连接的两个地点。
每个测试中,该函数恰好调用一次,并且必须返回所有有趣路径的团队丰富度之和。
输入格式
输入格式:
- 第 行:两个整数 和 ;
- 第 行: 个整数 ;
- 第 行:两个整数 和 ,即第 条道路的两个端点。
输出格式
输出格式:
- 第 行:函数的返回值。
6 3
1 0 0 1 2 1
0 1
0 2
0 3
0 4
0 5
21
7 1
0 0 0 0 0 0 0
0 1
0 2
1 3
1 4
2 5
2 6
4
6 3
0 1 2 0 1 2
0 1
1 2
2 3
1 4
2 5
11
提示
样例 1 解释
简单路径的最大长度为 ,因此有趣路径包含 条道路和 个地点。团队丰富度为 的有趣路径有 条,团队丰富度为 的有 条,团队丰富度为 的有 条,总和为 。
样例 2 解释
图中队伍 用黄色表示:
:::align{center}
:::
由于所有地点都属于唯一的一支队伍,每条路径的团队丰富度均为 。长度为 的有趣路径共有 条,因此总和为 。
样例 3 解释
图中队伍 为黄色,队伍 为绿色,队伍 为红色:
:::align{center}
:::
有趣路径的长度为 。共有 条有趣路径,其中 条的团队丰富度为 ,另 条为 ,总和为 。
限制
- 对每个 ,均有
- 对每个 ,均有
子任务
| 子任务 | 分值 | 附加限制 | ||
|---|---|---|---|---|
| 0 | - | 样例。 | ||
| 1 | 4 | 每个地点最多与另外两个地点直接相连。 | ||
| 2 | 7 | 存在一个地点与其他所有地点直接相连。 | ||
| 3 | 9 | - | ||
| 4 | 10 | |||
| 5 | ||||
| 6 | 9 | |||
| 7 | 11 | |||
| 8 | 12 | |||
| 9 | 13 | 有趣路径的长度为奇数。 | ||
| 10 | 15 | - | ||