题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232

并查集入门题。最近在学并查集,它无非包括三个操作:make_set(x)、union_set(x, y)和find_set(x)。

make_set(x)的作用是使得每一个成员x自成一个只包含x的集合。

union_set(x, y)的作用是使x和y合并成为一个新的集合,确定x和y的连通性。

find_set(x)则是查找到x的祖先,这里用set[i]表示元素 i  的祖先,换句话说就是,包含x的集合(唯一)的代表,当然这个代表是集合中的某个成员。对于如何选择代表要具体问题具体分析,但是要注意,如果寻找某一动态集合的代表两次,且在两次之间不修改集合,那么两次得到的答案应该是相同的。

并查集主要是用于确定无向图中连通子图的个数。这条题目实质上就是找出非连通子图的个数,对应的结果就是最少还需要建设的道路数目。

 #include <iostream>
using namespace std; const int maxn = ; int set[maxn]; int find_set(int x)
{
int t = x;
while (x != set[x])
{
x = set[x];
}
int j;
while (t != x) // 路径压缩,其实这里不用也行,它是为了处理元素很多或整棵树变为一条链的情况的,可以减少时间复杂度
{
j = set[t];
set[t] = x;
t = j;
}
return x;
} void union_set(int x, int y)
{
x = find_set(x);
y = find_set(y);
if (x != y)
set[x] = y;
} int main()
{
int i, n, m, c1, c2;
while (scanf("%d%d", &n, &m) != EOF && n)
{
for (i = ; i <= n; i++) // make_set(x)
{
set[i] = i;
}
for (i = ; i < m; i++)
{
scanf("%d%d", &c1, &c2);
union_set(c1, c2); // 把c1和c2合并成一个集合,确定它们是连通的
}
int cnt = -;
for (i = ; i <= n; i++) // 注意:cnt是从-1开始的。每个集合都有一个“代表”。假设如果只有一个集合,那么是不再需要建设道路的,至少要有两个代表,才需要建设一条道路
{
if (set[i] == i) // 每得到一个集合的代表,就需要建设一条路,只有一个集合的不需要建设道路!
cnt++;
}
printf("%d\n", cnt);
}
return ;
}

hdu 1232 畅通工程 解题报告的更多相关文章

  1. 【九度OJ】题目1028:继续畅通工程 解题报告

    [九度OJ]题目1028:继续畅通工程 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1028 题目描述: 省政府" ...

  2. 【九度OJ】题目1024:畅通工程 解题报告

    [九度OJ]题目1024:畅通工程 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅 ...

  3. 【九度OJ】题目1017:还是畅通工程 解题报告

    [九度OJ]题目1017:还是畅通工程 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1017 题目描述: 某省调查乡村交通 ...

  4. 【九度OJ】题目1012:畅通工程 解题报告

    [九度OJ]题目1012:畅通工程 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1012 题目描述: 某省调查城镇交通状况 ...

  5. HDU 1232 畅通工程(道路连接)(裸并查集)

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

  6. hdu 1232 畅通工程(并查集算法)

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

  7. 题解报告:hdu 1232 畅通工程(并查集)

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

  8. HDU 1232 畅通工程(模板——并查集)

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

  9. HDU 1232(畅通工程)题解

    以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定一具有N个节点的图和其边集,求其集合数量. [题目分析] 并查集经典题...其实就是创建好并查集就行了.. [算法流程] 于 ...

随机推荐

  1. javascript设计模式-装饰模式

    装饰模式:在不改变原类(对象)和继承的情况下动态扩展对象功能,通过包装一个对象来实现一个新的具有原对象相同接口的新的对象.在设计原则中,有一条,多用组合,少用继承,装饰模式正是这一原则的体现. UML ...

  2. RONOJ 6今明的预算方案(有依赖的背包)

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...

  3. _stdcall与_cdecl(了解)

    调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用而建立的一种协议.这种协议规定了该语言的函数中的参数传送方式.参数是否可变和由谁来处理堆栈等问题.不同的语言定义了不 ...

  4. list的使用命令 百度经验保存

    在key对应的list的头部添加字符串元素 命令:lpush               #参数0 到-1  是从开始到结束 2 在key对应list的尾部添加字符串元素: 命令:rpush 3 在k ...

  5. JSP 使用

    JSP教程: http://www.w3cschool.cc/jsp/jsp-tutorial.html jsp语法: 任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依 ...

  6. Nginx 服务器性能参数设置

    Nginx服务器性能调优 Nginx 配置文件 1.根据CPU内核数设置worker进程个数,以12核CPU为例,设置11个worker进程: worker_processes 11; worker_ ...

  7. C语言绘制余弦函数图象

    #include"stdio.h" #include"math.h" void main() { double y; int x,m; for(y=1;y> ...

  8. ajax遍历数组(实现百度搜索提示的效果)

    方法一: 页面 <input type="hidden" id="classpath" value="${pageContext.request ...

  9. ftp (文件传输协议)

    ftp (文件传输协议) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议” ...

  10. 【原创】angularjs1.3.0源码解析之service

    Angular服务 在angular中,服务(service)是以提供特定的功能的形式而存在的. angular本身提供了很多内置服务,比如: $q: 提供了对promise的支持. $http: 提 ...