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

并查集专题: HDU1232畅通工程


畅通工程

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 55552    Accepted Submission(s): 29588


Problem 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
3 3
4 3
1 2
5 2
1 3 2 3 1 2
0
3 5
999 0
 

Sample Output

      
1
0
998
2
Hint
Hint
Huge input, scanf is recommended.
 

Source
浙大计算机研究生复试上机考试-2005年
Problem : 1232 ( 畅通工程 )     Judge Status : Accepted
RunId : 21246972    Language : G++    Author : hnustwanghe
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
#include<iostream> #include<cstdio> using namespace std; const int N = 1000 + 5; int pre[N]; int Find(int x){ return pre[x]==x?x:(pre[x]=Find(pre[x])); } bool Merge(int x,int y){ x = Find(x),y = Find(y); if(x!=y) pre[x] = y; return x!=y?true:false; } int main(){ int n,m,from,to; while(scanf("%d %d",&n,&m)==2 && n){ for(int i=0;i<N;i++) pre[i] = i; for(int i=0;i<m;i++) { scanf("%d %d",&from,&to); Merge(from,to); } int ans = -1; for(int i=1;i<=n;i++) if(pre[i]==i) ans++; printf("%d\n",ans); } }
#include<iostream>
#include<cstdio>

using namespace std;
const int N = 1000 + 5;
int pre[N];
int Find(int x){
    return pre[x]==x?x:(pre[x]=Find(pre[x]));
}
bool Merge(int x,int y){
    x = Find(x),y = Find(y);
    if(x!=y) pre[x] = y;
    return x!=y?true:false;
}
int main(){
    int n,m,from,to;
    while(scanf("%d %d",&n,&m)==2 && n){
        for(int i=0;i<N;i++) pre[i] = i;
        for(int i=0;i<m;i++) {
            scanf("%d %d",&from,&to);
            Merge(from,to);
        }
        int ans = -1;
        for(int i=1;i<=n;i++) if(pre[i]==i) ans++;
        printf("%d\n",ans);
    }
}

 

转载于:https://www.cnblogs.com/Pretty9/p/7347709.html

相关文章:

  • 深入理解7816(3)-----关于T=0 【转】
  • 安装aix 6.1系统的完整教程,初学者都可以学会
  • iOS 颜色设置看我就够了
  • [webpack] devtool里的7种SourceMap[转]
  • 【Unity笔记】用代码动态修改Animator状态机的状态
  • ES6解构赋值
  • 给Lisp程序员的Python简介
  • 《thinking in Java》--第二章一切都是对象
  • C# 添加、修改和删除PDF书签
  • DIR
  • 《分布式系统:概念与设计》一2.4.2 故障模型
  • Airbnb 数据基础设施与其背后的哲学
  • 给Java开发者的10个大数据工具和框架
  • BOOM:一款有趣的Javascript动画效果
  • Spark的三种集群deploy模式对比
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • CSS中外联样式表代表的含义
  • Git 使用集
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • node 版本过低
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Yeoman_Bower_Grunt
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 番外篇1:在Windows环境下安装JDK
  • 分布式任务队列Celery
  • 关于 Cirru Editor 存储格式
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 数据结构java版之冒泡排序及优化
  • 微信开源mars源码分析1—上层samples分析
  • 微信小程序填坑清单
  • 【云吞铺子】性能抖动剖析(二)
  • Java性能优化之JVM GC(垃圾回收机制)
  • 浅谈sql中的in与not in,exists与not exists的区别
  • #define
  • #考研#计算机文化知识1(局域网及网络互联)
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (+4)2.2UML建模图
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (12)Hive调优——count distinct去重优化
  • (2)(2.10) LTM telemetry
  • (31)对象的克隆
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (初研) Sentence-embedding fine-tune notebook
  • (分布式缓存)Redis分片集群
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (三)docker:Dockerfile构建容器运行jar包
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)SpringBoot3---尚硅谷总结
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .Net 4.0并行库实用性演练
  • .net core 6 redis操作类