CF883G Orientation of Edges

题目描述

Vasya 拥有一张由有向边和无向边组成的图。这张图中,两个顶点之间可能存在多条边。 Vasya 从中选定了一个顶点 $s$。现在,他希望制定两个不同的方案: 1. 将每条无向边指定一个方向,以最大化从顶点 $s$ 可以到达的其他顶点数量; 2. 将每条无向边指定一个方向,以最小化从顶点 $s$ 可以到达的其他顶点数量。 在每个方案中,所有无向边都必须变为有向边。同一条无向边可以在两个方案中选择不同的方向。 你的任务是帮助 Vasya 找出这两个方案。

输入格式

第一行输入三个整数 $n$、$m$ 和 $s$,分别表示图中的顶点数、边数,以及 Vasya 选择的起始顶点满足 $2 \le n \le 3 \times 10^5$,$1 \le m \le 3 \times 10^5$,$1 \le s \le n$。 接下来的 $m$ 行中,每行包含三个整数 $t_i$、$u_i$ 和 $v_i$,描述图中的一条边和连接的顶点,条件为 $1 \le t_i \le 2$,$1 \le u_i, v_i \le n$,且 $u_i \neq v_i$。如果 $t_i = 1$,表示这是一条从顶点 $u_i$ 指向顶点 $v_i$ 的有向边。如果 $t_i = 2$,表示这是一条连接顶点 $u_i$ 和 $v_i$ 的无向边。 保证至少存在一条无向边。

输出格式

前两行输出第一种方案,即最大化可达顶点数量的方案。第三行和第四行输出第二种方案,即最小化可达顶点数量的方案。 每种方案的第一行输出一个整数,表示从起始顶点 $s$ 可以到达的顶点总数。第二行由 $f$ 个符号 '+' 和 '-' 组成,其中 $f$ 是图中无向边的数量。对于输入中的第 $j$ 条无向边 $(u, v)$,如果在该方案中这条边应从 $u$ 指向 $v$,输出 '+';反之,如果应从 $v$ 指向 $u$,输出 '-'。无向边按输入顺序编号。 如果有多个解,输出任意一个即可。 **本翻译由 AI 自动生成**