(step 5.1.1)hdu 1232(畅通工程——并查集)

来源:互联网 发布:网络电视有翡翠台吗 编辑:程序博客网 时间:2024/06/05 08:09

题目大意:本题是中文题,可以直接去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);}}