#arc0322. [arc032_2]道路工事

[arc032_2]道路工事

问题文

在大工的小镇上,道路建设正在进行中。小镇上有 NN 个交叉路口和 MM 条道路,道路连接了两个不同的交叉路口,并且是双向通行的。不方便的是,并不是从一个交叉路口到另一个交叉路口都可以通过道路来往。

大工的建设公司希望建造一些连接不同交叉路口的道路,使得从任何一个交叉路口都可以通过道路到达其他任何一个交叉路口。

请回答,为了使得任何交叉路口都可以通过道路到达其他交叉路口,至少需要建造多少条道路?如果已经存在的道路可以使得任何交叉路口都可以到达其他交叉路口,则输出 00


输入

输入以以下格式从标准输入中给出。

NN MM a1a_1 b1b_1 a2a_2 b2b_2 : aMa_M bMb_M

  • 11 行包含 22 个整数 N(1N100,000)N (1 ≤ N ≤ 100,000)M(0M100,000)M (0 ≤ M ≤ 100,000),分别表示小镇上的交叉路口数量和已经存在的道路数量。
  • 22 行到第 MM 行每行包含一条已经存在的道路信息。其中第 ii 行包含 22 个整数 ai,bi(1ai<biN)a_i, b_i (1 ≤ a_i < b_i ≤ N),表示第 ii 条道路连接的两个交叉路口。
  • 不会存在连接同一交叉路口的多条道路。也就是说,对于任意的 i,j(1i,jM)i,j (1 ≤ i,j ≤ M),如果 iji ≠ j,那么 aiaja_i ≠ a_j 或者 bibjb_i ≠ b_j

输出

输出新建造的道路的最小数量,并在第 11 行输出。

注意不要忘记末尾的换行符。


输入例子1

4 2
1 2
1 3

输出例子1

1

交叉路口 112233 之间互相通过道路相连,但交叉路口 44 没有连接。例如,只需要建造一条连接交叉路口 1144 的道路即可。


输入例子2

6 4
1 2
2 3
1 3
5 6

输出例子2

2

注意:此Markdown文本仅包含问题描述和示例,输入这些信息不应该作为解答中的一部分。