并查集 入门-HDU 1232

来源:互联网 发布:足彩大数据分析哪里看 编辑:程序博客网 时间:2024/06/06 19:16

问题:最少还需要建设多少条道路,使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。

解决方案:相通的路具有相同的根节点。求出有多少棵树,每棵树看成一个节点,为了使这些节点相通,需要(节点数-1)的边。


#include <iostream>#include <cstdio>using namespace std;const int MAXN=1005;int parent[MAXN];int find_set(int x){    return parent[x]!=x?parent[x]=find_set(parent[x]):x;}int main(){    int n,m;    while(scanf("%d%d",&n,&m),n)    {        for(int i=1;i<=n;i++)        {            parent[i]=i;        }        for(int i=0;i<m;i++)        {            int u,v,pu,pv;            scanf("%d%d",&u,&v);            pu=find_set(u);            pv=find_set(v);            if(pu!=pv)                parent[pu]=pv;        }        int cnt=0;        for(int i=1;i<=n;i++)            if(parent[i]==i)            cnt++;        printf("%d\n",cnt-1);    }    return 0;}


原创粉丝点击