CF1957F2.Frequency Mismatch (Hard Version)
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是该问题的困难版本。两种版本的区别在于 k 的约束条件。只有在解决了所有版本的问题后,你才能进行 Hack。
给定一棵有 n 个节点的无向树。每个节点 v 上写有一个值 av。你需要回答与这棵树相关的若干查询。
你将得到 q 个查询。每个查询给出 5 个整数 u1,v1,u2,v2,k。设 xc 表示值为 c 的节点在路径 u1→v1 上出现的次数,yc 表示值为 c 的节点在路径 u2→v2 上出现的次数。如果存在 z 个不同的 c 满足 xc=yc,请输出任意 min(z,k) 个这样的 c,顺序不限。
输入格式
第一行包含一个整数 n(1≤n≤105),表示树的节点数。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤105),表示每个节点上的值。
接下来 n−1 行,每行包含两个整数 u 和 v(1≤u,v≤n,u=v),表示树中的一条边。保证给定的边构成一棵树。
接下来一行包含一个整数 q(1≤q≤105),表示查询的数量。
接下来 q 行,每行包含五个整数 u1,v1,u2,v2,k(1≤u1,v1,u2,v2≤n,1≤k≤10)。
输出格式
对于每个查询,输出一行。对于每个查询,先输出 min(z,k),然后在同一行输出任意 min(z,k) 个在两条路径上出现次数不同的值,顺序不限。
输入输出样例
输入#1
5 5 2 3 4 3 1 2 1 3 2 4 2 5 4 1 4 4 5 3 2 3 2 3 1 1 4 4 5 1 5 5 4 3 10
输出#1
2 3 5 0 1 5 3 5 2 4
说明/提示
对于第 1 个查询,第一条路径为 1→2→4,经过的值集合为 {5,2,4}。第二条路径 4→2→5,值集合为 {4,2,3}。有两个数 3 和 5 出现次数不同,因此输出它们。
对于第 2 个查询,两条路径完全相同,因此输出 0。
对于第 3 个查询,路径与第 1 个查询相同,但只需输出 1 个值,因此输出 5。
对于第 4 个查询,第一条路径只有节点 5,值集合为 {3},第二条路径 4→2→1→3,值集合为 {4,2,5,3}。数 5、2 和 4 出现次数不同。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?