题目大意:给你一个图(无向图)(结点和边)让你求出最少还要连几条边就可以使整个图成为一个连通图
有几个连通分量就至少要几条边,所以此题是图的连通问题。
# include <stdio.h>
int N,M;
int pre[1005];
int find(int x){
int r;
int p=x;
int i;
while(pre[p]!=p){
p=pre[p];
}
r=p;//找到了根
p=x;
while (p!=r){//把 从x到r路上的都归到r下面
i=pre[p];
pre[p]=r;
p=i;
}
return r;
}
int main()
{
scanf ("%d",&N);
while (N!=0){
scanf("%d",&M);
int num=N-1;
for (int i=1;i<=N;i++){
pre[i]=i;
}
for (int i=1;i<=M;i++){
int x,y;
int f1,f2;
scanf ("%d %d",&x,&y);
f1=find(x);
f2=find(y);
if (f1!=f2){
num--;
pre[f2]=f1;
}
}
printf ("%d\n",num);
scanf("%d",&N);
}
return 0;
}