CF2127E.Ancient Tree

提高+/省选-

通过率:0%

AC君温馨提醒

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

题目描述

Bahamin 从过去来到未来拜访 Ali,并带来了一棵古老的树作为礼物。他发现树上的一些顶点失去了颜色。Bahamin 需要重新为这些顶点上色,但他正忙于修理他的时光机。幸运(或不幸)的是,现在恐龙负责处理这类任务——当然是要收费的。他需要你的帮助来找到最小花费的上色方案。因此,他给你提出了如下问题。

给定一棵有根树∗^{\text{∗}},共有 nn 个顶点,顶点 11 为根。每个顶点有一个整数权值 wiw_i 和一个颜色 cic_i,颜色是 11 到 kk 之间的整数。然而,有些顶点失去了颜色,用 ci=0c_i = 0 表示。

我们称顶点 vv 为 cutie,当且仅当存在两个顶点 xx 和 yy,满足:

  • lca⁡(x,y)†=v\operatorname{lca}(x, y)\text{†} = v,
  • cx=cyc_x = c_y,
  • cx≠cvc_x \neq c_v。

树的花费定义为所有 cutie 顶点的权值之和。

你需要为所有失去颜色的顶点分配 11 到 kk 之间的颜色,使得树的花费最小,并给出一种达到最小花费的上色方案。

∗^{\text{∗}}树是一个无环连通图。有根树是指定出一个特殊顶点作为根的树。

†lca⁡(x,y)\text{†}\operatorname{lca}(x, y) 表示 最近公共祖先(LCA)。

输入格式

每个测试包含多组数据。第一行包含测试组数 tt(1≤t≤1041 \le t \le 10^4)。接下来是每组测试数据的描述。

每组测试数据的第一行包含两个整数 nn 和 kk(3≤n≤2⋅1053 \leq n \leq 2 \cdot 10^5,2≤k≤n2 \leq k \leq n),分别表示顶点数和颜色数。

第二行包含 nn 个整数 w1,w2,…,wnw_1,w_2,\ldots,w_n(1≤wi≤1091 \leq w_i \leq 10^9),表示每个顶点的权值。

第三行包含 nn 个整数 c1,c2,…,cnc_1,c_2,\ldots,c_n(0≤ci≤k0 \leq c_i \leq k),表示每个顶点的颜色。ci=0c_i=0 表示顶点 ii 失去了颜色。

接下来 n−1n-1 行,每行包含两个整数 uu 和 vv(1≤u,v≤n1 \leq u, v \leq n),表示一条连接顶点 uu 和 vv 的边。

保证给定的边构成一棵树。

保证所有测试数据中 nn 的总和不超过 2⋅1052 \cdot 10^5。

输出格式

对于每组测试数据,第一行输出一个整数,表示所有合法上色方案中最小的花费。

第二行输出 nn 个整数 c1′,c2′,…,cn′c'_1, c'_2, \ldots, c'_n,表示一种达到最小花费的上色方案。你需要保证:

  • 如果 ci≠0c_i \neq 0,则 ci′=cic'_i = c_i;
  • 如果 ci=0c_i = 0,则 1≤ci′≤k1 \leq c'_i \leq k。

如果有多种最小花费的上色方案,可以输出任意一种。

输入输出样例

  • 输入#1

    4
    4 4
    5 5 5 5
    1 0 2 3
    1 2
    1 3
    1 4
    5 2
    3 1 4 1 5
    1 2 1 2 2
    1 4
    2 1
    3 4
    4 5
    11 3
    3 1 4 3 1 4 3 1 4 5 6
    0 0 0 2 1 2 1 2 2 1 1
    1 2
    2 3
    2 4
    2 5
    2 6
    1 7
    7 8
    7 9
    10 3
    3 11
    4 3
    2 3 2 3
    2 1 0 0
    3 1
    1 2
    2 4

    输出#1

    0
    1 4 2 3
    3
    1 2 1 2 2
    7
    2 3 1 2 1 2 1 2 2 1 1
    0
    2 1 3 1

说明/提示

在第一个测试用例中,缺失颜色有四种选择:

  • c2=1c_2 = 1 时,没有顶点成为 cutie,花费为 00;
  • c2=2c_2 = 2 时,顶点 11 成为 cutie,因为 c2=c3=2c_2 = c_3 = 2,lca⁡(2,3)=1\operatorname{lca}(2, 3) = 1 且 c1≠2c_1 \neq 2。因此花费为 w1=5w_1 = 5;
  • c2=3c_2 = 3 时,顶点 11 成为 cutie,因为 c2=c4=3c_2 = c_4 = 3,lca⁡(2,4)=1\operatorname{lca}(2, 4) = 1 且 c1≠3c_1 \neq 3。因此花费为 w1=5w_1 = 5;
  • c2=4c_2 = 4 时,没有顶点成为 cutie,花费为 00。

因此,不同上色方案的最小花费为 00。

在第二个测试用例中,每个顶点都有颜色,因此当前花费不可改变。由于 c5=c2=2c_5 = c_2 = 2,lca⁡(2,5)=1\operatorname{lca}(2, 5) = 1 且 c1≠2c_1 \neq 2,顶点 11 是 cutie,当前花费为 w1=3w_1 = 3。

在第三个测试用例中,下面是一种可能的最小花费上色方案:

其他一些合法的上色方案:

  • c=[3,1,2,2,1,2,1,2,2,1,1]c = [3, 1, 2, 2, 1, 2, 1, 2, 2, 1, 1],使得顶点 1,2,3,71, 2, 3, 7 成为 cutie:

    • lca⁡(4,8)=1\operatorname{lca}(4, 8) = 1;
    • lca⁡(3,4)=2\operatorname{lca}(3, 4) = 2;
    • lca⁡(10,11)=3\operatorname{lca}(10, 11) = 3;
    • lca⁡(8,9)=7\operatorname{lca}(8, 9) = 7。

    上述所有顶点与其 LCA 的颜色不同,因此花费为 w1+w2+w3+w7=11w_1 + w_2 + w_3 + w_7 = 11。

  • c=[3,2,1,2,1,2,1,2,2,1,1]c = [3, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1],使得顶点 1,2,71, 2, 7 成为 cutie:

    • lca⁡(5,7)=1\operatorname{lca}(5, 7) = 1;
    • lca⁡(5,11)=2\operatorname{lca}(5, 11) = 2;
    • lca⁡(8,9)=7\operatorname{lca}(8, 9) = 7。

    上述所有顶点与其 LCA 的颜色不同,因此花费为 w1+w2+w7=7w_1 + w_2 + w_7 = 7。

可以证明不存在花费小于 77 的上色方案。

由 ChatGPT 4.1 翻译

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

首页