CF1387A Graph

题目描述

给定一个无向图,每条边都有两种颜色之一:黑色或红色。 你的任务是给每个节点分配一个实数,使得: - 对于每条黑色边,其两个端点的值之和为 $1$; - 对于每条红色边,其两个端点的值之和为 $2$; - 所有分配的数的绝对值之和尽可能小。 如果无法满足上述条件,请报告没有可行的分配方案。

输入格式

第一行包含两个整数 $N$($1 \leq N \leq 100\,000$)和 $M$($0 \leq M \leq 200\,000$),分别表示节点数和边数。节点编号为 $1, 2, \ldots, N$。 接下来的 $M$ 行描述每条边。每行包含三个整数 $a$、$b$ 和 $c$,表示在节点 $a$ 和 $b$ 之间有一条颜色为 $c$ 的边($1$ 表示黑色,$2$ 表示红色),其中 $1 \leq a, b \leq N$。

输出格式

如果存在解,第一行输出 "YES",第二行输出 $N$ 个用空格分隔的数,第 $i$ 个数表示分配给第 $i$ 个节点的数。 输出需满足: - 每条边的两个端点的数之和与要求的精确值之差小于 $10^{-6}$; - 所有分配数的绝对值之和与最小可能值之差小于 $10^{-6}$。 如果有多个合法解,输出任意一个即可。 如果无解,输出一行 "NO"。

说明/提示

注意,在第二个样例中,解不是唯一的。 由 ChatGPT 4.1 翻译