CF1957F2.Frequency Mismatch (Hard Version)

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是该问题的困难版本。两种版本的区别在于 kk 的约束条件。只有在解决了所有版本的问题后,你才能进行 Hack。

给定一棵有 nn 个节点的无向树。每个节点 vv 上写有一个值 ava_v。你需要回答与这棵树相关的若干查询。

你将得到 qq 个查询。每个查询给出 55 个整数 u1,v1,u2,v2,ku_1, v_1, u_2, v_2, k。设 xcx_c 表示值为 cc 的节点在路径 u1→v1u_1 \rightarrow v_1 上出现的次数,ycy_c 表示值为 cc 的节点在路径 u2→v2u_2 \rightarrow v_2 上出现的次数。如果存在 zz 个不同的 cc 满足 xc≠ycx_c \neq y_c,请输出任意 min⁡(z,k)\min(z, k) 个这样的 cc,顺序不限。

输入格式

第一行包含一个整数 nn(1≤n≤1051 \leq n \leq 10^5),表示树的节点数。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(1≤ai≤1051 \leq a_i \leq 10^5),表示每个节点上的值。

接下来 n−1n-1 行,每行包含两个整数 uu 和 vv(1≤u,v≤n,u≠v1 \leq u, v \leq n, u \neq v),表示树中的一条边。保证给定的边构成一棵树。

接下来一行包含一个整数 qq(1≤q≤1051 \leq q \leq 10^5),表示查询的数量。

接下来 qq 行,每行包含五个整数 u1,v1,u2,v2,ku_1, v_1, u_2, v_2, k(1≤u1,v1,u2,v2≤n1 \leq u_1, v_1, u_2, v_2 \leq n,1≤k≤101 \leq k \leq 10)。

输出格式

对于每个查询,输出一行。对于每个查询,先输出 min⁡(z,k)\min(z, k),然后在同一行输出任意 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

说明/提示

对于第 11 个查询,第一条路径为 1→2→41 \rightarrow 2 \rightarrow 4,经过的值集合为 {5,2,4}\{5, 2, 4\}。第二条路径 4→2→54 \rightarrow 2 \rightarrow 5,值集合为 {4,2,3}\{4, 2, 3\}。有两个数 33 和 55 出现次数不同,因此输出它们。

对于第 22 个查询,两条路径完全相同,因此输出 00。

对于第 33 个查询,路径与第 11 个查询相同,但只需输出 11 个值,因此输出 55。

对于第 44 个查询,第一条路径只有节点 55,值集合为 {3}\{3\},第二条路径 4→2→1→34 \rightarrow 2 \rightarrow 1 \rightarrow 3,值集合为 {4,2,5,3}\{4, 2, 5, 3\}。数 55、22 和 44 出现次数不同。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页