现在的位置: 首页 > 综合 > 正文

hdu(1232)图论

2013年08月13日 ⁄ 综合 ⁄ 共 898字 ⁄ 字号 评论关闭

#include <stdio.h>
int pre[2000];
int fun(int x)                                                 -------------------------------------//找x的根节点((((重要函数)))
{
    int r = x;
    while(pre[r]!=r)                                             (((((不相等就一直查找,,直到相等时查找结束,,,即找到了掌门人))))
          r=pre[r];
    return r;
}
int main()
{
    int n,m,i,x,y,a,b,sum;
    while(scanf("%d",&n),n)
    {
        sum = n-1;                                        //初始化Ans等于N个点联通所需要的最少边的数目!
        for(i=1;i<=n;++i)
   pre[i]=i;
       scanf("%d",&m);
        while(m--)
        {
            scanf("%d%d",&x,&y);
           a=fun(x);                                       //x根节点
             b=fun(y);                                    //y根节点
            if(a!=b)                                      //根节点不同则设一个位另外一个的根
   {
              pre[b]=a;
              sum--;                                       //合并了两颗树,所以需要添加的路径的数目减一!
   }
  }
       printf("%d\n",sum);
    }
 return 0;

抱歉!评论已关闭.