SP24957 PETYABRO - Petya Brother and Repairment of Roads
题目描述
Petya 住在一个名为 Mayapur 的城市。每天早晨,市民们都喜欢在床上享受一杯热茶,因此他们需要牛奶来制作茶饮。为了方便获取牛奶,大家希望通过城市中的双向道路前往奶农处。城市里有 $m$ 条道路,这些道路因年久失修,每年都需要重新维修。
去年,Petya 已经维修了这些道路。由于去年他的预算有限,他尽可能用最低的费用来确保每个人都能从某个奶农处获得牛奶。然而,一些人抱怨,由于路线问题,他们需要走很远的路才能到达奶农。今年,Petya 想要再次修复这些道路,使得每个人都可以到达离自己最近的奶农。因此,他需要选择一些道路进行维修,确保每个市民都能连接到最近的奶农。维修每条道路都需支付一定的费用,Petya 希望在此过程中尽量节省资金。需要注意的是,奶农本身可以从自己的家里获取牛奶,不需要去到其他奶农那里。不过,由于 Petya 这次不愿劳神去规划这些工作,他将任务交给了他的兄弟。
你的任务是帮助 Petya 的兄弟计算出,以这种方式对道路进行维修所需的最低成本。如果某个市民无法连接到任何奶农,请输出 "impossible"。
请确保输出能够覆盖每个人都能通往他们最近的奶农的最小成本。
输入格式
第一行输入两个空格分隔的整数 $n$ 和 $m$:分别表示 Mayapur 城市的市民人数和待修复的道路数量。
第二行输入 $n$ 个用空格分隔的整数,每个整数为 $0$ 或 $1$,表示该市民是否是奶农($1$ 表示他是奶农)。($1 \le n \le 10^5$)
接下来 $m$ 行,每行包含三个空格分隔的整数 $u, v, c$,表示存在一条未维修的道路连接 $u$ 和 $v$,且维修该道路的成本为 $c$。($1 \le u, v \le n$ 且 $u \neq v$)
($1 \le m \le \min(n \cdot (n - 1) / 2, 2 \times 10^5)$,$1 \le c \le 10^9$。)
输出格式
如果可以实现,请输出最小的维修费用;否则输出 "impossible"。
**本翻译由 AI 自动生成**