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

HDU 1232:畅通工程(并查集模板)

畅通工程

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


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
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

听了会长将并查集,记住了代码,但是有几个点还不是太理解,先记下来,以后慢慢理解( ̄▽ ̄)~*

#include<cstdio>    //第一次用万能头文件过了,第二次交就编译错误TAT
int f[1100];
int find(int x)    //查询x的根节点(带路径压缩) 
{
	if(x!=f[x]) f[x]=find(f[x]);
	return f[x];
}
void join(int x,int y)    //合并根节点
{
        //分别查询x和y的根节点 
	int dx=find(x);
	int dy=find(y);    //如果根节点不同,则合并 
	if(dy!=dx)
	{
		f[dx]=dy;
	}
}
int main()
{
	int n,m;
	while(~scanf("%d",&n)&&n)
	{
		int x,y;
		for(int i=1;i<=n;i++) f[i]=i;    //不要忘了初始化
		scanf("%d",&m);
		while(m--)
		{
			scanf("%d%d",&x,&y);
			join(x,y);
		}
		int ans=0; 
		for(int i=1;i<=n;i++)
		{
			if(i==f[i]) ans++;    //这里是==
		}
		printf("%d\n",ans-1);
	}
	return 0;
}

转载于:https://www.cnblogs.com/Friends-A/p/9309024.html

相关文章:

  • input按回车键,响应相关事件
  • 前端面试题:JS中的let和var的区别
  • CentOS 安装ActiveMQ
  • hdu1009 FatMouse' Trade---贪心
  • android-------Java 常问的基础面试题
  • 网络爬虫练习
  • [离散时间信号处理学习笔记] 15. 模拟信号的数字处理
  • Python进阶细节
  • php rsa加密解密实例
  • BZOJ2599:[IOI2011]Race(点分治)
  • 泛型就这么简单
  • React Native模块加载与原理分析
  • Git 与each
  • .Net Core和.Net Standard直观理解
  • Webpack 4x 之路 ( 四 )
  • JS 中的深拷贝与浅拷贝
  • 【个人向】《HTTP图解》阅后小结
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • echarts花样作死的坑
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • gitlab-ci配置详解(一)
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • LeetCode算法系列_0891_子序列宽度之和
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Xmanager 远程桌面 CentOS 7
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 初识 beanstalkd
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 复习Javascript专题(四):js中的深浅拷贝
  • 高程读书笔记 第六章 面向对象程序设计
  • 简单易用的leetcode开发测试工具(npm)
  • 来,膜拜下android roadmap,强大的执行力
  • 前端面试总结(at, md)
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 微服务框架lagom
  • 智能合约Solidity教程-事件和日志(一)
  • 国内开源镜像站点
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​第20课 在Android Native开发中加入新的C++类
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (pytorch进阶之路)扩散概率模型
  • (差分)胡桃爱原石
  • (二)JAVA使用POI操作excel
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (七)Java对象在Hibernate持久化层的状态
  • (四) Graphivz 颜色选择
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)Mysql的优化设置
  • . ./ bash dash source 这五种执行shell脚本方式 区别