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

 

原题目链接:http://hdu.hustoj.com/showproblem.php?pid=1232

并查集:并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。(取自360百科)

虽然这题用我们以前的暴力也能解题,但是到数据过大的时候会超时,所以此处就考虑到了时间复杂度,所以要用并查集,大大的减少了输出答案所需要的时间。

该题其实很简单,应该算是并查集的入门题吧。

题目, 比如样例:

5 2 (n=5,m=2)

1 2 城镇1 2相连

3 5 城镇3 5相连 那么(1,2) (3,5) (4) 总共有3个集合,集合数目-1就是答案。

又比如说 1,3相连 3,5相连 5,7相连 3.9相连

用通俗的说法 3的父亲是1 5的父亲是3,5的爷爷是1, 7的父亲是5.....后面所有的与该相通的祖宗都是同一个。然后再后面的步骤中,将同一个祖宗的城镇,改值。

贴上代码:

#include<stdio.h>
int bin[1010];
int findx(int x)
{
int r=x;
while (bin[r]!=r)             //改变原城镇的初始值
r=bin[r];
return r;
}
void merge(int x,int y)
{
int fx,fy;
fx=findx(x);
fy=findx(y);
if (fx!=fy)
bin[fx]=fy;
}
int main()
{
int n,m,x,y,i,ans;
while (scanf("%d%d",&n,&m)&&n)
{
for (i=1;i<=n;i++)              //对城镇初始化
bin[i]=i;
if (m==0)   
printf ("%d\n",n-1);
else{
for (;m>0;m--){
scanf ("%d%d",&x,&y);
merge(x,y);
}
for (ans=0,i=1;i<=n;i++)
if (bin[i]==i)               // 计数 有几个城镇集合
ans++;
printf ("%d\n",ans-1);
}
}
return 0;
}

hdu畅通工程(并查集)的更多相关文章

  1. hdu 1863 畅通工程 (并查集+最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    M ...

  2. hdu 1233 还是畅通工程 并查集or最小生成树

    某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路 ...

  3. HDU - 1232 畅通工程-并查集模板

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

  4. <hdu - 1232> 畅通工程 并查集问题 (注意中的细节)

    本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232  结题思路:因为题目是汉语的,那我就不解释题意了,要求的是最少建设的道路,我们可以用并查集来做这 ...

  5. HDU 1232 畅通工程(并查集)

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Des ...

  6. HDU 1232 (畅通工程) 并查集经典模板题

    Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通 ...

  7. hdu 1863 畅通工程 (并查集 、 kruskal)

    畅通工程Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  8. [HDOJ1232]畅通工程(并查集)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1232 题目描述 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表, ...

  9. HDU1232 畅通工程 并查集

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  10. ACM: 继续畅通工程-并查集-最小生成树-解题报告

    继续畅通工程 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Descri ...

随机推荐

  1. 初识EMC

    EMC,即电磁兼容,是指设备在预期的电磁环境中,能按设计要求正常抵抗电磁干扰的能力.其主要包含3个方面:电磁干扰(EMI),电磁抗扰(EMS)与静电放电抗扰(ESD). 电磁干扰的方式可以大概分为传导 ...

  2. sql 两表查询后 更新某表中部分字段

    这是上一个sql更新某表字段的一个延伸,在更新表数据时,实际上会有多表数据查询场景,查询后,只需要更新某一个表中的数据,以下提供两个方法, 第一种使用update 两表查询 update api_ma ...

  3. POJ Air Raid 【DAG的最小不相交路径覆盖】

    传送门:http://poj.org/problem?id=1422 Air Raid Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

  4. Github 上一些关于PHP的开源项目

    Github  上一些关于PHP的开源项目,总有你喜欢的那一款 Awesome PHP Package Management Package Management Related Frameworks ...

  5. Hashtable详细介绍(源码解析)和使用示例

    第1部分 Hashtable介绍 Hashtable 简介 和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射. Hashtable 继承于Dic ...

  6. Cesium.js隐藏logo等信息

    css: .cesium-widget-credits{ display:none!important;}js: var viewer = new Cesium.Viewer('cs', { anim ...

  7. 20.springboot项目部署到linux服务器文件上传临时路径处理问题

    1.前言 把项目部署到服务器上之后,文件上传默认会在/tmp路径中. 之前想了各种解决办法,比如如何更改这个上传路径...... 最后发现不是个好的方法,当然就想到了更好的解决方案. 就是我把上传文件 ...

  8. update、commit、trancate,delete

    update 用于更新表的数据,使用方式为: update table_name set column_name=值 条件 顺便一提:date数据插入更新应该使用 to_date()格式转换函数例如: ...

  9. Python函数中参数类型

    在学习Python函数的时候,函数本身的定义和调用并不是很复杂,但是函数的参数类型和用法的确有些复杂.在此做一个小结,加深理解. Python参数的定义 负责给函数提供一些必要的数据或信息,以保证函数 ...

  10. Beginning DirectX11 Game Programming

    DirectX11 or 10 made a big change comparing to DirectX9 The fixed-function pipeline was removed in D ...