加边的无向图

给你一个 n 个点,m 条边的无向图,求至少要在这个的基础上加多少条无向边使得任意两个点可达~

输入描述:
第一行两个正整数 n 和 m 。
接下来的m行中,每行两个正整数 i 、 j ,表示点i与点j之间有一条无向道路。

输出描述:
输出一个整数,表示答案
示例1
输入
4 2
1 2
3 4
输出
1

备注:
对于100%的数据,有n,m<=100000。

#include<cstdio>
int n,m,i,x,y,ans,f[1000000];
int F(int x){return f[x]==x?x:f[x]=F(f[x]);}
int main()
{
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)f[i]=i;
	ans=n-1;
	while(m--)
	{
		scanf("%d%d",&x,&y);
		if(F(x)!=F(y))ans--,f[f[x]]=f[y];
	}
	printf("%d",ans);
	return 0; 
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页