500. 连通块中点的数量
时间限制:1000 MS 内存限制:64 MB
题目描述
# 连通块中点的数量 ## 题目描述 给定一个包含 $n$ 个点的无向图,点的编号为 $1$ 至 $n$。初始时图中没有边。 现在要依次进行 $m$ 个操作,操作共有三种: 1. `C a b`:在点 $a$ 和点 $b$ 之间添加一条无向边。 2. `Q1 a b`:询问点 $a$ 和点 $b$ 是否在同一个连通块中。 3. `Q2 a`:询问点 $a$ 所在连通块中点的数量。 在 `C a b` 和 `Q1 a b` 操作中,$a$ 和 $b$ 可以相等。允许重复添加边,操作过程中不会删除边。 ## 输入格式 从文件 `components.in` 中读入数据。 第一行包含两个整数 $n$ 和 $m$,分别表示点的数量和操作的数量。 接下来 $m$ 行,每行包含一个操作,格式为 `C a b`、`Q1 a b` 或 `Q2 a` 中的一种。 ## 输出格式 将结果输出到文件 `components.out` 中。 对于每个 `Q1 a b` 操作,如果点 $a$ 和点 $b$ 在同一个连通块中,则输出 `Yes`,否则输出 `No`。 对于每个 `Q2 a` 操作,输出一个整数,表示点 $a$ 所在连通块中点的数量。 按照询问出现的顺序输出,每个结果占一行。`C a b` 操作不产生输出。 ## 数据范围 - $1 \le n,m \le 10^5$。 - 所有操作中出现的点编号均在 $1$ 至 $n$ 的范围内。 - 在 `C a b` 和 `Q1 a b` 操作中,允许 $a=b$。 ## 样例输入 ``` 5 5 C 1 2 Q1 1 2 Q2 1 C 2 5 Q2 5 ``` ## 样例输出 ``` Yes 2 3 ``` ## 运行限制 - 时间限制:$1000$ 毫秒。 - 内存限制:$64$ MB。