HDU 1232 并查集

来源:互联网 发布:网络io 文件系统 编辑:程序博客网 时间:2024/05/30 02:23
/*    这题要用到的算法是并查集    将能够连接的城镇看成是一个集合    然后统计出所有集合的个数    根据n个点能连成通路的规则可知还需要建设的道路为sum-1条*/#include<iostream>using namespace std;int b[1002];int find_(int t)//找到点t所在的集合{    if(b[t] != t)        b[t] = find_(b[t]);    return b[t];}void with(int aa, int bb)//合并函数:将在一个集合里的点合并在一起{    int x, y;    x = find_(aa);    y = find_(bb);    if(x > y) b[x] = y;    else b[y] = x;}int main(){    int n, m;    while(cin >> n, n)    {        for(int i = 1; i <= n; i++)//将每个点初始化为一个独立的集合            b[i] = i;        cin >> m;        while(m--)        {            int a, b;            cin >> a >> b;            with(a,b);//将a,b合并在一起        }        int sum = -1;//sum用来统计集合的数目,sum初始为-1,统计后得到就是所需要的道路数目        for(int i = 1; i <= n; i++)            if(b[i] == i) sum++;        cout << sum << endl;    }    return 0;}

0 0
原创粉丝点击