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 翻译