CF2127E.Ancient Tree
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Bahamin 从过去来到未来拜访 Ali,并带来了一棵古老的树作为礼物。他发现树上的一些顶点失去了颜色。Bahamin 需要重新为这些顶点上色,但他正忙于修理他的时光机。幸运(或不幸)的是,现在恐龙负责处理这类任务——当然是要收费的。他需要你的帮助来找到最小花费的上色方案。因此,他给你提出了如下问题。
给定一棵有根树∗,共有 n 个顶点,顶点 1 为根。每个顶点有一个整数权值 wi 和一个颜色 ci,颜色是 1 到 k 之间的整数。然而,有些顶点失去了颜色,用 ci=0 表示。
我们称顶点 v 为 cutie,当且仅当存在两个顶点 x 和 y,满足:
- lca(x,y)†=v,
- cx=cy,
- cx=cv。
树的花费定义为所有 cutie 顶点的权值之和。
你需要为所有失去颜色的顶点分配 1 到 k 之间的颜色,使得树的花费最小,并给出一种达到最小花费的上色方案。
∗树是一个无环连通图。有根树是指定出一个特殊顶点作为根的树。
†lca(x,y) 表示 最近公共祖先(LCA)。
输入格式
每个测试包含多组数据。第一行包含测试组数 t(1≤t≤104)。接下来是每组测试数据的描述。
每组测试数据的第一行包含两个整数 n 和 k(3≤n≤2⋅105,2≤k≤n),分别表示顶点数和颜色数。
第二行包含 n 个整数 w1,w2,…,wn(1≤wi≤109),表示每个顶点的权值。
第三行包含 n 个整数 c1,c2,…,cn(0≤ci≤k),表示每个顶点的颜色。ci=0 表示顶点 i 失去了颜色。
接下来 n−1 行,每行包含两个整数 u 和 v(1≤u,v≤n),表示一条连接顶点 u 和 v 的边。
保证给定的边构成一棵树。
保证所有测试数据中 n 的总和不超过 2⋅105。
输出格式
对于每组测试数据,第一行输出一个整数,表示所有合法上色方案中最小的花费。
第二行输出 n 个整数 c1′,c2′,…,cn′,表示一种达到最小花费的上色方案。你需要保证:
- 如果 ci=0,则 ci′=ci;
- 如果 ci=0,则 1≤ci′≤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=1 时,没有顶点成为 cutie,花费为 0;
- c2=2 时,顶点 1 成为 cutie,因为 c2=c3=2,lca(2,3)=1 且 c1=2。因此花费为 w1=5;
- c2=3 时,顶点 1 成为 cutie,因为 c2=c4=3,lca(2,4)=1 且 c1=3。因此花费为 w1=5;
- c2=4 时,没有顶点成为 cutie,花费为 0。
因此,不同上色方案的最小花费为 0。
在第二个测试用例中,每个顶点都有颜色,因此当前花费不可改变。由于 c5=c2=2,lca(2,5)=1 且 c1=2,顶点 1 是 cutie,当前花费为 w1=3。
在第三个测试用例中,下面是一种可能的最小花费上色方案:

其他一些合法的上色方案:
-
c=[3,1,2,2,1,2,1,2,2,1,1],使得顶点 1,2,3,7 成为 cutie:
- lca(4,8)=1;
- lca(3,4)=2;
- lca(10,11)=3;
- lca(8,9)=7。
上述所有顶点与其 LCA 的颜色不同,因此花费为 w1+w2+w3+w7=11。
-
c=[3,2,1,2,1,2,1,2,2,1,1],使得顶点 1,2,7 成为 cutie:
- lca(5,7)=1;
- lca(5,11)=2;
- lca(8,9)=7。
上述所有顶点与其 LCA 的颜色不同,因此花费为 w1+w2+w7=7。
可以证明不存在花费小于 7 的上色方案。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?