题目大意:本题是中文题,可以直接去OJ上看
解题思路:
1)注意:两个城市之间可以有多条道路相通,也就是说
3 3
1 2
1 2
2 1
代码如下:
/*
* 1232_2.cpp
*
* Created on: 2013年8月23日
* Author: Administrator
* 章泽天,我的女神!!!!
*/
#include <iostream>
using namespace std;
int pre[1000];
int n,m;
int p1,p2;
int total;
int find(int x){
int i,j,r;
r = x;
while(r != pre[r]){
r = pre[r];
}
i = x;
while(i != r){
j = pre[i];
pre[i] = r;
i = j;
}
return r;
}
void join(int x , int y){
int fx = find(x);
int fy = find(y);
if(fx != fy){
pre[fx] = fy;
--total;//不要放在外面。因为有一种输入是(1 2) (1 2),这样的话total就减重复了
}
}
int main(){
while(scanf("%d",&n)!=EOF,n){
int i;
total = n - 1;
for( i = 1 ; i <= n ; ++i){
pre[i] = i;
}
scanf("%d",&m);
while(m--){
scanf("%d%d",&p1,&p2);
join(p1,p2);
}
printf("%d\n",total);
}
}