AT_abc245_g [ABC245G] Foreign Friends
题目描述
有 N 个人和 K 个国家,分别编号为人 1、人 2、…、人 N 以及国家 1、国家 2、…、国家 K。每个人恰好属于一个国家,其中人 i 属于国家 Ai。另外,有 L 位“人气者”,具体为人 B1、人 B2、…、人 BL。最初,N 个人中任意两个人都不是朋友。
作为神的高桥君,可以通过支付费用让 M 对两人组成为朋友。具体来说,对于 1≤i≤M,支付费用 Ci 可以让人 Ui 和人 Vi 成为朋友。
现在,对于每个 1≤i≤N,请回答下列问题:
高桥君是否可以让人 i 与一个属于不同国家的“人气者”间接成为朋友?如果可以,请求出达成这一目标所需的最小总费用。这里,若存在某个非负整数 n 和一列人 (u0,u1,…,un),满足 u0=s,un=t,且对于所有 0≤i<n,人 ui 和人 ui+1 是朋友,则称人 s 和人 t 间接为朋友。
输入格式
输入按以下格式从标准输入给出。
N M K L
A1 A2 ⋯ AN
B1 B2 ⋯ BL
U1 V1 C1
U2 V2 C2
⋮
UM VM CM
输出格式
定义 Xi 为让人 i 与属于不同国家的“人气者”间接成为朋友所需的最小费用。如果无法达成,则 Xi=−1。请将 X1,X2,…,XN 以空格分隔输出在一行。
输入输出样例 #1
输入 #1
4 4 2 2
1 1 2 2
2 3
1 2 15
2 3 30
3 4 40
1 4 10
输出 #1
45 30 30 25
输入输出样例 #2
输入 #2
3 1 3 1
1 2 3
1
1 2 1000000000
输出 #2
-1 1000000000 -1
说明/提示
限制条件
- 2≤N≤105
- 1≤M≤105
- 1≤K≤105
- 1≤L≤N
- 1≤Ai≤K
- 1≤B1<B2<⋯<BL≤N
- 1≤Ci≤109
- 1≤Ui<Vi≤N
- 若 i=j,则 (Ui,Vi)=(Uj,Vj)
- 所有输入均为整数。
样例解释 1
人 1、人 2、人 3、人 4 分别属于国家 1、国家 1、国家 2、国家 2,人气者为人 2、人 3 共 2 人。此时:
- 对于人 1,属于不同国家的人气者只有人 3。让人 1 与人 3 间接成为朋友的最小费用为 15+30=45(即先支付 15 让人 1 与人 2 成为朋友,再支付 30 让人 2 与人 3 成为朋友)。
- 对于人 2,属于不同国家的人气者只有人 3。直接支付 30 让人 2 与人 3 成为朋友,费用最小。
- 对于人 3,属于不同国家的人气者只有人 2。直接支付 30 让人 2 与人 3 成为朋友,费用最小。
- 对于人 4,属于不同国家的人气者只有人 2。让人 4 与人 2 间接成为朋友的最小费用为 10+15=25(即先支付 10 让人 1 与人 4 成为朋友,再支付 15 让人 1 与人 2 成为朋友)。
样例解释 2
对于人 1,虽然自己可以算作间接朋友,但由于没有属于不同国家的人气者,故不存在满足条件的对象。请注意“属于不同国家的人气者”的条件。
由 ChatGPT 4.1 翻译