当前位置: 首页 > news >正文

HDU 1232 畅通工程 并查集

畅通工程
Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Description

某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? 
 

Input

测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。为简单起见,城镇从1到N编号。 
注意:两个城市之间可以有多条道路相通,也就是说 
3 3 
1 2 
1 2 
2 1 
这种输入也是合法的 
当N为0时,输入结束,该用例不被处理。 
 

Output

对每个测试用例,在1行里输出最少还需要建设的道路数目。 
 
 Sample Input
4 2 1 3 4 3 3 3 1 2 1 3 2 3 5 2 1 2 3 5 999 0 0
 

Sample Output

1 0 2 998

Hint

Hint  Huge input, scanf is recommended.
 
 
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

const int maxn=1005;

int father[maxn],Rank[maxn];
int n,m;
int count;

void Init(int n)
{
    for(int i=1;i<=n;i++)
    {
        father[i]=i;
        Rank[i]=1;
    }
}

int Find(int x)
{
    if(x!=father[x])
    {
        father[x]=Find(father[x]);
    }
    return father[x];
}

void Union(int x,int y)
{
    x=Find(x);
    y=Find(y);
    if(x==y)
        return;
    if(Rank[x]>=Rank[y])
    {
        father[y]=x;
        Rank[x]+=Rank[y];
    }
    else
    {
        father[x]=y;
        Rank[y]+=Rank[x];
    }
}

int main()
{
    //freopen("input.txt","r",stdin);
    while(~scanf("%d",&n)&&n!=0)
    {
        Init(n);
        scanf("%d",&m);
        int a,b;
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d",&a,&b);
            Union(a,b);
        }
        count=0;
        for(int i=1;i<=n;i++)
        {
            if(i==father[i])
                count++;
        }
        printf("%d\n",count-1);
    }
}

  

 

转载于:https://www.cnblogs.com/Hyouka/p/5709356.html

相关文章:

  • Duilib创建窗口双击标题栏禁止窗口最大化
  • 数据处理四舍五入,保留两位小数
  • 家长需要反复领悟的33句话
  • 导航栏的字体颜色的设置小收集
  • nrm ls执行不成功,显示node:internal/validators:119 throw new ERR_INVALID_ARG_TYPE(name, ‘string‘, value)
  • 基于LDAP下的Samba服务
  • 前端 项目里 常用的判断语句 有实例
  • mysql 主从同步
  • 张掖百公里,再次折戟
  • 前端 封装 时间转换
  • 封装一个接口方法,根据条件,调用不同接口数据
  • Linux正则表达式
  • es6的解构赋值 和扩展运算符 ... 的区别
  • 项目上线注意事项
  • apply()方法
  • [译]如何构建服务器端web组件,为何要构建?
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【面试系列】之二:关于js原型
  • CSS3 变换
  • dva中组件的懒加载
  • echarts花样作死的坑
  • es6
  • hadoop集群管理系统搭建规划说明
  • HTTP--网络协议分层,http历史(二)
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • oschina
  • python 装饰器(一)
  • SpiderData 2019年2月23日 DApp数据排行榜
  • ViewService——一种保证客户端与服务端同步的方法
  • 从PHP迁移至Golang - 基础篇
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 番外篇1:在Windows环境下安装JDK
  • 基于Android乐音识别(2)
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 入门到放弃node系列之Hello Word篇
  • 我的面试准备过程--容器(更新中)
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 由插件封装引出的一丢丢思考
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #大学#套接字
  • (03)光刻——半导体电路的绘制
  • (30)数组元素和与数字和的绝对差
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (多级缓存)缓存同步
  • (九)One-Wire总线-DS18B20
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (四)linux文件内容查看
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)WLAN定义和基本架构转
  • (转) Face-Resources
  • . ./ bash dash source 这五种执行shell脚本方式 区别