求一个图 变成生成树至少还要加几条边(成环的边要删掉,但不用统计)
Sample Input
4 2 //n m
1 3//u v
4 3
3 3
1 2
1 3
2 3
5 2
1 2
3 5
999 0
0
Sample Output
1
0
2
998
# include <iostream>
# include <cstdio>
# include <cstring>
# include <algorithm>
# include <cmath>
# include <queue>
# define LL long long
using namespace std ; const int MAXN=;
int F[MAXN];
int find(int x)//找x的祖先结点
{
if(F[x]==x) return x;
return F[x]=find(F[x]);
}
void bing(int u,int v)
{
int t1=find(u);
int t2=find(v);
if(t1!=t2) //这两个点不在一个集合里
F[t1]=t2; //合并到一个集合里
}
int main()
{
//freopen("in.txt","r",stdin) ;
int n,m;
while(scanf("%d",&n),n)
{
int i ;
scanf("%d",&m);
for(i=;i<=n;i++)
F[i]=i;
int u,v;
while(m--)
{
scanf("%d%d",&u,&v);
bing(u,v);
}
int res=;
for(i=;i<=n;i++)
if(F[i]==i)
res++;
printf("%d\n",res-);
}
return ;
}