HDU 1232 畅通工程(与1856类似 )

来源:互联网 发布:扫街软件是什么意思 编辑:程序博客网 时间:2024/05/16 13:17
这个题目也是典型的最小生成树算法的利用,不同于其他的题目就在于其它要求的是要添加的边的最少数目,使得任意两

点都有联系,利用并查集算法 ,在题目已经给出的map基础上,统计两棵树相并的次数,即使要添加的路径的最少数目。


#include<stdio.h>#include<stdlib.h>int father[1001],tot;int find(int x){int r=x;while(r!=father[r])r=father[r];return r;}void join(int a,int b){int fa=find(a),fb=find(b);if(fa!=fb){father[fa]=fb;tot--;}}int main(){int n,m,x,y,i;while(scanf("%d",&n),n){scanf("%d",&m);tot=n-1;for(i=1;i<=n;i++)father[i]=i;for(i=1;i<=m;i++){scanf("%d%d",&x,&y);join(x,y);}printf("%d\n",tot);}return 0;}