您的位置:首页 > 其它

HDOJ  1232    畅通工程

2015-12-18 18:08 381 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1232

最开始做最小生成树的题,自己不会做,在网上找了一个代码看了一下,

感觉思路很清晰,找树的根的个数(联通分支数)K,最后要修的K-1路就是把这些根链接起来

形成一个最小生成树

#include <stdio.h>

int bin[1002];

int findx(int x)

{

int
r=x;

while(bin[r]
!=r)


r=bin[r];

return
r;

}

void merge(int x,int y)

{

int
fx,fy;

fx =
findx(x);

fy =
findx(y);

if(fx !=
fy)


bin[fx] = fy;

}

int main()

{

int
n,m,i,x,y,count;


while(scanf("%d",&n),n)

{


for(i=1;i<=n;i++)


bin[i] = i;


for(scanf("%d",&m);m>0;m--)


{


scanf("%d %d",&x,&y);


merge(x,y);


}


for(count=-1, i=1;i<=n;i++)


if(bin[i] == i)


count ++;


printf("%d\n",count);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: