hdu 1232 畅通工程 并查集 最小生成树

来源:互联网 发布:淘宝客服电话人工接听 编辑:程序博客网 时间:2024/06/05 02:49

输入n和m,分别表示城市的数目和道路的数目,接下来m行,每行输入2个数a和b,表示a和b已经联通,问最少还需要修建多少条路就可以联通所有的城市(a和b联通的,b和c联通的,那么a和c也是联通的)?

此题用并查集,

代码如下:

#include<stdio.h>#include<string.h>int fa[10007],n,m;int find(int x){    if(fa[x]==x) return x;    else return find(fa[x]);}int main(){    int i,a,b;    while(scanf("%d",&n)!=EOF)    {        if(n==0) break;        scanf("%d",&m);        for(i=0;i<=n;i++) fa[i]=i;        while(m--)        {            scanf("%d%d",&a,&b);            fa[find(a)]=find(b);        }        int ans=0;        for(i=1;i<=n;i++)        {            if(fa[i]==i) ans++;        }        printf("%d\n",ans-1);    }    return 0;}

0 0
原创粉丝点击