HDU 1232 (畅通工程) 并查集经典模板题
注意:两个城市之间可以有多条道路相通,也就是说
3 3
1 2
1 2
2 1
这种输入也是合法的
当N为0时,输入结束,该用例不被处理。
1 3
4 3
3 3
1 2
1 3
2 3
5 2
1 2
3 5
999 0
0
0
2
998
#include<bits/stdc++.h>
using namespace std;
int pre[1000];//记录每个点的前导点
int find(int x)//查找根节点
{
int r=x;
while(pre[r]!=r)//返回根节点r
r=pre[r];
int i=x;
int j;
while(i!=r)//路径压缩
{
j=pre[i];//在改变上级之前用临时变量j记录下他的值
pre[i]=r;//把上级改为根节点
i=j;
}
return r;
}
void join(int x,int y)//判断x、y是否连通(此题只单独写一个函数解释,题目中不使用函数)
{
//如果已经连通,就不用管了 //如果不连通,就把它们所在的连通分支合并起,
int fx=find(x),fy=find(y);
if(fx!=fy)
pre[fx]=fy;
}
int main()
{
//freopen("input.txt","r",stdin);
int n,m,p1,p2,i,total,f1,f2;
while(scanf("%d",&n) && n)//读入n,如果n为0,结束
{
total=n-1;//刚开始的时候,有n个城镇,一条路都没有,那么要修n-1条路才能把它们连起来
//每个点互相独立,自成一个集合,从1编号到n,所以每个点的上级都是自己
for(int i=1;i<=n;i++)
pre[i]=i;
//共有m条路
scanf("%d",&m);
while(m--)
{
//下面这段代码,其实就是join函数,只是稍作改动以适应题目要求
//每读入一条路,看它的端点p1,p2是否已经在一个连通分支里了
scanf("%d %d",&p1,&p2);
f1=find(p1);
f2=find(p2);
//如果是不连通的,那么把这两个分支连起来
//分支的总数就减少了1,还需建的路也就减了1
if(f1!=f2)
{
pre[f2]=f1;
total--;
}
//如果两点已经连通了,那么这条路只是在图上增加了一个环
//对连通性没有任何影响,无视掉
}
//最后输出还要修的路条数
printf("%d\n",total);
}
return 0;
}
HDU 1232 (畅通工程) 并查集经典模板题的更多相关文章
- <hdu - 1232> 畅通工程 并查集问题 (注意中的细节)
本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 结题思路:因为题目是汉语的,那我就不解释题意了,要求的是最少建设的道路,我们可以用并查集来做这 ...
- HDU - 1232 畅通工程-并查集模板
某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可). ...
- HDU 1232 畅通工程(并查集)
畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Des ...
- hdu 1863 畅通工程 (并查集+最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others) M ...
- hdu 1863 畅通工程 (并查集 、 kruskal)
畅通工程Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdu1232畅通工程(并查集,简单题)
传送门 最少好要修多少条路太能使全部城镇连通.只要用并查集算可以连通的城市的组数,修的路就是组数减1 #include<bits/stdc++.h> using namespace std ...
- hdu 1232 畅通工程(并查集算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 畅通工程 Time Limit: 4000/2000 MS (Java/Others) M ...
- HDU 1232 畅通工程(道路连接)(裸并查集)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1232 畅通工程 Time Limit: 4000/2000 MS (Java/Others) ...
- HDU 1232(畅通工程)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定一具有N个节点的图和其边集,求其集合数量. [题目分析] 并查集经典题...其实就是创建好并查集就行了.. [算法流程] 于 ...
随机推荐
- Java AOP 注解配置与xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 17-取石子-hdu1846(巴什博奕)
http://acm.hdu.edu.cn/showproblem.php?pid=1846 Brave Game Time Limit: 1000/1000 MS (Java/Others) ...
- 打印vector内容
<span style="font-size:14px;">#include <iostream> #include <vector> #inc ...
- 面向对象property属性、静态方法和类方法
一.property属性 1.什么是property特性? property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值. from math import pi class Circl ...
- 第十课,ROS仿真2
Rviz 属性 1.下面以turtlebot_stage inRviz为例 首先安装 sudo apt-get install ros-indigo-turtlebot-simulator 运行 ro ...
- Entity Framework 6.0 Tutorials(10):Index Attribute
Index Attribute: Entity Framework 6 provides Index attribute to create Index on a particular column ...
- Struts2 配置及运行时遇到问题
1.java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilt ...
- Spring jdbcTemplate RowMapper绑定任意对象
RowMapper可以将数据中的每一行封装成用户定义的类,在数据库查询中,如果返回的类型是用户自定义的类型则需要包装,如果是Java自定义的类型,如:String则不需要,Spring最新的类Simp ...
- ElasticSearch 笔记(一)
一.Elasticsearch 印象 分布式.全文检索.数据分析. 二.为什么不用传统关系型数据库,如 MySQL,做搜索 举个反例.假设有以下数据库表 t_game: id name 1 唐僧取 ...
- TriggerAction扩展----ExInvokeCommandAction
Wp&Win8中使用命令绑定时,除了Button控件自带命令绑定,其他的时候是用Interactivity库中的InvokeCommandAction实现的(Win8 需要额外安装第三方NuG ...