#aBC245G. [ABC245G] Foreign Friends

[ABC245G] Foreign Friends

AT_abc245_g [ABC245G] Foreign Friends

题目描述

NN 个人和 KK 个国家,分别编号为人 11、人 22\ldots、人 NN 以及国家 11、国家 22\ldots、国家 KK。每个人恰好属于一个国家,其中人 ii 属于国家 AiA_i。另外,有 LL 位“人气者”,具体为人 B1B_1、人 B2B_2\ldots、人 BLB_L。最初,NN 个人中任意两个人都不是朋友。

作为神的高桥君,可以通过支付费用让 MM 对两人组成为朋友。具体来说,对于 1iM1\leq i\leq M,支付费用 CiC_i 可以让人 UiU_i 和人 ViV_i 成为朋友。

现在,对于每个 1iN1\leq i\leq N,请回答下列问题:

高桥君是否可以让人 ii 与一个属于不同国家的“人气者”间接成为朋友?如果可以,请求出达成这一目标所需的最小总费用。这里,若存在某个非负整数 nn 和一列人 (u0,u1,,un)(u_0, u_1, \ldots, u_n),满足 u0=su_0=sun=tu_n=t,且对于所有 0i<n0\leq i < n,人 uiu_i 和人 ui+1u_{i+1} 是朋友,则称人 ss 和人 tt 间接为朋友。

输入格式

输入按以下格式从标准输入给出。

NN MM KK LL
A1A_1 A2A_2 \cdots ANA_N
B1B_1 B2B_2 \cdots BLB_L
U1U_1 V1V_1 C1C_1
U2U_2 V2V_2 C2C_2
\vdots
UMU_M VMV_M CMC_M

输出格式

定义 XiX_i 为让人 ii 与属于不同国家的“人气者”间接成为朋友所需的最小费用。如果无法达成,则 Xi=1X_i=-1。请将 X1,X2,,XNX_1,X_2,\ldots,X_N 以空格分隔输出在一行。

输入输出样例 #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

说明/提示

限制条件

  • 2N1052\leq N\leq 10^5
  • 1M1051\leq M\leq 10^5
  • 1K1051\leq K\leq 10^5
  • 1LN1\leq L\leq N
  • 1AiK1\leq A_i\leq K
  • 1B1<B2<<BLN1\leq B_1 < B_2 < \cdots < B_L\leq N
  • 1Ci1091\leq C_i\leq 10^9
  • 1Ui<ViN1\leq U_i < V_i\leq N
  • iji\neq j,则 (Ui,Vi)(Uj,Vj)(U_i, V_i)\neq (U_j, V_j)
  • 所有输入均为整数。

样例解释 1

11、人 22、人 33、人 44 分别属于国家 11、国家 11、国家 22、国家 22,人气者为人 22、人 3322 人。此时:

  • 对于人 11,属于不同国家的人气者只有人 33。让人 11 与人 33 间接成为朋友的最小费用为 15+30=4515+30=45(即先支付 1515 让人 11 与人 22 成为朋友,再支付 3030 让人 22 与人 33 成为朋友)。
  • 对于人 22,属于不同国家的人气者只有人 33。直接支付 3030 让人 22 与人 33 成为朋友,费用最小。
  • 对于人 33,属于不同国家的人气者只有人 22。直接支付 3030 让人 22 与人 33 成为朋友,费用最小。
  • 对于人 44,属于不同国家的人气者只有人 22。让人 44 与人 22 间接成为朋友的最小费用为 10+15=2510+15=25(即先支付 1010 让人 11 与人 44 成为朋友,再支付 1515 让人 11 与人 22 成为朋友)。

样例解释 2

对于人 11,虽然自己可以算作间接朋友,但由于没有属于不同国家的人气者,故不存在满足条件的对象。请注意“属于不同国家的人气者”的条件。

由 ChatGPT 4.1 翻译