HDU 1232

来源:互联网 发布:python 字典转化列表 编辑:程序博客网 时间:2024/05/15 23:49

http://acm.hdu.edu.cn/showproblem.php?pid=1232

本人并查集专题:http://blog.csdn.net/fsafs168/article/details/7801010

/* * 并查集,直接标准写法秒过 * 思路:所谓畅通工程反向思维一下就是不畅通的有几块。 * 相应的建立的路就是:不畅通的块数-1 */#include <stdio.h>int father[1010];void ini(int n){    for(int i=0;i<=n;i++)        father[i] = i;}int find(int x){    if(x != father[x])        return find(father[x]);    return father[x];}void sert(int a, int b){    father[a] = b;}int main(){    int n,m,i,j;    while(scanf("%d",&n)!=EOF&&n)    {        scanf("%d",&m);        ini(n);        for(i=0;i<m;i++)        {            int a,b;            scanf("%d%d",&a,&b);            a = find(a);    //找根节点            b = find(b);    //找根节点            if(a!=b)                sert(a,b);        }        int sum = -1;   //肯定是-1啦,因为至少有一块地方么        for(i=1;i<=n;i++)        {            if(i == find(i))    //有多少根节点                sum++;        }        printf("%d\n",sum);    }    return 0;}