#P1014. demon的荒岛求生

demon的荒岛求生

背景

demon 正在玩一个生存游戏,现在他被困在了一片群岛海域。

于是 demon 想把所有岛屿连通起来以便建立贸易网络,但……似乎他现在并没有多少启动资金。

描述

地图上有 mm 个岛屿,其中已经有 nn 条双向航线在岛屿间穿梭。

为了节约开支,请问他 最少还需要开辟多少条新航线 ,才能从任意一个岛到达任意另一个岛?

形式化的,给定 mm 个节点(岛屿)和 nn 条无向边(已有航线)。求至少还需要添加多少条边,才能使整张图连通。

输入格式

第一行两个整数 m,nm, n,表示节点数和已有边数。

接下来 nn 行,每行两个整数 a,ba, b,表示节点 aabb 之间有一条无向边。

输出格式

一行一个整数,表示最少还需添加的边数。

样例

5 3
1 2
2 3
4 5
1

样例解释:节点 1-2-3 构成一个连通分量,4-5 构成另一个。连接它们只需 1 条边(如 3-4)。

4 0
3

限制

1m1051 \le m \le 10^50nmin(105,m(m1)2)0 \le n \le \min(10^5, \frac{m(m-1)}{2})1a,bm1 \le a, b \le m

提示:统计图中的连通分量个数 kk,答案即为 k1k-1。使用并查集(DSU)可实现近乎线性的时间复杂度。