`
Simone_chou
  • 浏览: 192821 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

畅通工程(并查集)

    博客分类:
  • HDOJ
 
阅读更多

畅通工程

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

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
Hint
Hint
Huge input, scanf is recommended.

     思路:其实就是判断有多少个集合,然后总集合数-1就是还需要建的道路。

 

     AC:

#include<stdio.h>
#define max 1000+5
int road[max];
int find(int a)
{
	int root=a,temp;
//找根节点
	while(road[root]!=root)
	   root=road[root];
//路径压缩
	while(root!=a)
	 {
		temp=road[a];
		road[a]=root;
		a=temp;
	 }
	return root; 
}
int main()
{
	int n,m;
	while(scanf("%d",&n)!=EOF)
	{
		int sum=0;
		if(n==0) break;
		scanf("%d",&m);
//初始化根节点
		for(int i=1;i<=n;i++)
		   road[i]=i;
		while(m--)
		{
			int a,b;
			int af,bf;
			scanf("%d%d",&a,&b);
			af=find(a);
			bf=find(b);
			if(af==bf) continue;
			else road[af]=bf;
		}
//算有多少个根节点
		for(int i=1;i<=n;i++)
		  if(road[i]==i) sum++;
	    printf("%d\n",sum-1);
	}
	return 0;
}
分享到:
评论

相关推荐

    acm 畅通工程 图论模板 最小生成树,Kruscal算法,采用了并查集技术,外加注释

    图论模板 最小生成树,Kruscal算法,采用了并查集技术,外加注释,很通俗易懂的,可以用来解决acm 畅通工程方面的问题

    (HDUACM201403版_06)并查集(最小生成树)

    杭电ACM课件2014版之 (HDUACM201403版_06)并查集(最小生成树)

    经典并查集PPT 这个比较不错啊

    在实际应用中,如题目所述的“畅通工程”问题,我们可以使用并查集来解决城镇之间道路连接的问题。每个城镇可以视为一个集合的元素,如果两个城镇之间有直接道路,我们就将它们所在的集合合并。最终,如果所有城镇都...

    最小生成树+并查集题目列表.docx

    本资源提供了关于最小生成树和并查集的题目列表,共40道题目,涵盖了基础最小生成树、基础并查集、枚举最小生成树、同构图、离线并查集、dfs 枚举组合情况、最大生成树、带权并查集、异或并查集、斯坦纳树、LCA等...

    并查集的讲解

    ### 并查集的核心概念与应用 #### 一、并查集的基本介绍 并查集是一种数据结构,主要用于处理一些不交集的合并及查询问题,可以高效地管理和查询元素间的连接关系。并查集主要由一个整数型数组和两个核心函数(`...

    acm算法--并查集详解

    ACM 算法 —— 并查集详解 并查集是一个非常重要的数据结构,在 ACM 竞赛中经常出现,今天我们来详细讲解并查集算法及其应用。 什么是并查集? 并查集是一种数据结构,它可以高效地解决连通性问题。所谓连通性问题...

    ACM并查集(Disjoint Set).pptx(共27页)

    ### ACM并查集(Disjoint Set)知识点梳理 #### 导引问题 - **问题背景**:在一个城市中,有n个人,这些人之间要么是朋友关系,要么是敌人关系。根据两条规则:“我朋友的朋友是我的朋友”、“我敌人的敌人也是我的...

    acm程序设计课件:幷查集

    在实际应用中,比如“畅通工程”问题,我们可以利用并查集来判断一个省份的所有城镇是否可以通过道路网络实现任意两个城镇之间的连通。通过并查集,我们可以快速地合并代表各个城镇的集合,如果最终所有城镇都在同一...

    ACM基础题型训练与代码

    在【部分内容】中给出的“畅通工程 (HDOJ-1232)”是一个典型的并查集应用问题。在这个问题中,我们需要通过已有的城镇道路信息构建一个图,然后利用并查集来判断是否存在一条路径使得所有城镇都能互相到达。这通常...

    杭州电子大学acm讲义ppt

    在实际应用中,如“畅通工程”这类问题,可以利用并查集来判断城镇之间是否存在可达路径。通过不断合并由道路连接的城镇,可以构建出一个反映城镇间可达性的集合结构。当需要判断两个城镇是否可达时,只需分别查找...

    ACM之图论500道

    【ACM之图论500道】是一个挑战性的图论题目集合,旨在通过大量练习提升你在图论领域的技能,特别是在最小生成树和并查集这两个核心概念上。完成这500道题,你将可能达到图论的较高水平。 最小生成树是图论中的一个...

    C++构造最小生成树

    C++的`&lt;algorithm&gt;`库中的`sort`函数可以用于边的排序,同时需要一个数据结构(如并查集,Disjoint Set)来检查新加入的边是否会创建环路。 3. **图的表示**:在C++中,图可以通过邻接矩阵或邻接表来表示。邻接矩阵...

    东银广场二期工程空调施工组织设计.docx

    - **工程概况**:东银广场二期工程位于某城市中心区域,是一座集购物、休闲于一体的大型商业综合体。该工程总面积覆盖地下一层及地上四层,主要用于商场经营。其中,地下一层为设备用房,包括冷冻机房;地上一至四层...

    施工环保工作计划总结.doc

    2. 填方路基:详查地质情况,预防不稳定因素,采取防雨措施,如使用土工布、塑料薄膜防止冲刷,设置临时集水沟和沉淀池。 3. 排水与防护:注意边沟与涵洞的无缝衔接,确保排水畅通,回填土略高于沟顶并压实,利于...

    计算机软件工程中的数据库编程技术研究-论文

    此外,在实践编辑中,DAO连接编辑技术表现出了自动化处理的优势,能够直接与端口建立通信链接,完成记录集、工作区等内容的封装和查询定义区间,并建立对象模型,实现对建设元素的输出与汇总。 在设计创新数据库...

    --公共资源交易一体化服务平台建设方案.doc

    主要目标是构建一个集招标、投标、开标、评标、合同签订等全过程于一体的电子化交易系统,实现跨部门、跨区域的资源共享,提高交易效率,降低交易成本,防止腐败现象,保障公共利益。 1.2. 建设内容 建设内容包括但...

    市智慧航道与信息服务系统设计方案 【129页Word】.docx

    它首先阐述了当前城市在航道管理中面临的问题,包括信息不畅通、安全监管力度不足、资源配置不合理等。通过对市海事安全监控现状的调研,分析了现有的监控系统存在的缺陷,如数据采集不全面、处理能力有限、响应速度...

    Hadoop+Spark+Hive+HBase+Oozie+Kafka+Flume+Flink+ES+Redash等详细安装部署

    在安装Hadoop时,通常需要配置集群环境,包括主节点和从节点,并确保所有节点之间的网络通信畅通。 Spark是大数据处理的另一个关键组件,它支持批处理、交互式查询(通过Spark SQL)、实时流处理(通过Spark ...

Global site tag (gtag.js) - Google Analytics